main: Code cleanup
This commit is contained in:
parent
a12903613f
commit
af7ce12443
@ -2,296 +2,295 @@
|
||||
using FireWallet;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace FireWalletLite
|
||||
namespace FireWalletLite;
|
||||
|
||||
public partial class DomainForm : Form
|
||||
{
|
||||
public partial class DomainForm : Form
|
||||
private readonly string Domain;
|
||||
private readonly MainForm Main;
|
||||
|
||||
public DomainForm(MainForm main, string domain)
|
||||
{
|
||||
private MainForm Main;
|
||||
private string Domain;
|
||||
public DomainForm(MainForm main, string domain)
|
||||
InitializeComponent();
|
||||
Main = main;
|
||||
Domain = domain;
|
||||
Text = domain + "/";
|
||||
// Theme form
|
||||
BackColor = ColorTranslator.FromHtml(main.Theme["background"]);
|
||||
ForeColor = ColorTranslator.FromHtml(main.Theme["foreground"]);
|
||||
foreach (Control control in Controls) main.ThemeControl(control);
|
||||
labelName.Text = domain + "/";
|
||||
}
|
||||
|
||||
private void buttonExplorer_Click(object sender, EventArgs e)
|
||||
{
|
||||
var psi = new ProcessStartInfo
|
||||
{
|
||||
InitializeComponent();
|
||||
this.Main = main;
|
||||
this.Domain = domain;
|
||||
Text = domain + "/";
|
||||
// Theme form
|
||||
BackColor = ColorTranslator.FromHtml(main.Theme["background"]);
|
||||
ForeColor = ColorTranslator.FromHtml(main.Theme["foreground"]);
|
||||
foreach (Control control in Controls)
|
||||
FileName = Main.DomainExplorer + Domain,
|
||||
UseShellExecute = true
|
||||
};
|
||||
Process.Start(psi);
|
||||
}
|
||||
|
||||
private void DomainForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!File.Exists(Main.dir + "domains.json")) return;
|
||||
|
||||
var domains = JArray.Parse(File.ReadAllText(Main.dir + "domains.json"));
|
||||
foreach (JObject domain in domains)
|
||||
if (domain["name"].ToString() == Domain)
|
||||
if (domain.ContainsKey("status"))
|
||||
switch (domain["status"].ToString())
|
||||
{
|
||||
case "transferring":
|
||||
buttonFinalize.Visible = true;
|
||||
buttonCancel.Visible = true;
|
||||
buttonTransfer.Visible = false;
|
||||
textBoxTransferAddress.Visible = false;
|
||||
break;
|
||||
case "closed":
|
||||
buttonCancel.Visible = false;
|
||||
buttonFinalize.Visible = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private async void buttonRenew_Click(object sender, EventArgs e)
|
||||
{
|
||||
var content = "{\"method\": \"renew\", \"params\": [\"" + Domain + "\"]}";
|
||||
var response = await Main.APIPost("", true, content);
|
||||
if (response == "Error")
|
||||
{
|
||||
var notify = new NotifyForm("Error renewing domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
var jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("result"))
|
||||
{
|
||||
Main.AddLog(jObject["result"].ToString());
|
||||
var result = (JObject)jObject["result"];
|
||||
if (result.ContainsKey("txid"))
|
||||
{
|
||||
main.ThemeControl(control);
|
||||
var txid = result["txid"].ToString();
|
||||
var notify = new NotifyForm("Renewed domain", "Explorer", Main.TXExplorer + txid);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
labelName.Text = domain + "/";
|
||||
}
|
||||
|
||||
private void buttonExplorer_Click(object sender, EventArgs e)
|
||||
{
|
||||
ProcessStartInfo psi = new ProcessStartInfo
|
||||
else
|
||||
{
|
||||
FileName = Main.DomainExplorer + Domain,
|
||||
UseShellExecute = true
|
||||
};
|
||||
Process.Start(psi);
|
||||
var notify = new NotifyForm("Error renewing domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var notify = new NotifyForm("Error renewing domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
Main.AddLog(jObject.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private async void buttonTransfer_Click(object sender, EventArgs e)
|
||||
{
|
||||
var address = textBoxTransferAddress.Text;
|
||||
var valid = await Main.ValidAddress(address);
|
||||
if (!valid)
|
||||
{
|
||||
var notify = new NotifyForm("Invalid address");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
private void DomainForm_Load(object sender, EventArgs e)
|
||||
var path = "wallet/" + Main.Account + "/transfer";
|
||||
var content = "{\"passphrase\": \"" + Main.Password + "\", \"name\": \"" + Domain +
|
||||
"\", \"broadcast\": true, \"sign\": true, \"address\": \"" + address + "\"}";
|
||||
var response = await Main.APIPost(path, true, content);
|
||||
if (response == "Error")
|
||||
{
|
||||
if (!File.Exists(Main.dir + "domains.json")) return;
|
||||
var notify = new NotifyForm("Error transferring domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
JArray domains = JArray.Parse(File.ReadAllText(Main.dir + "domains.json"));
|
||||
var jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("hash"))
|
||||
{
|
||||
var txid = jObject["hash"].ToString();
|
||||
var notify = new NotifyForm("Transferred domain", "Explorer", Main.TXExplorer + txid);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
AddDomainInfo("transferring");
|
||||
}
|
||||
else
|
||||
{
|
||||
var notify = new NotifyForm("Error transferring domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonFinalize_Click(object sender, EventArgs e)
|
||||
{
|
||||
var path = "wallet/" + Main.Account + "/finalize";
|
||||
var content = "{\"passphrase\": \"" + Main.Password + "\", \"name\": \"" + Domain +
|
||||
"\", \"broadcast\": true, \"sign\": true}";
|
||||
var response = Main.APIPost(path, true, content).Result;
|
||||
if (response == "Error")
|
||||
{
|
||||
var notify = new NotifyForm("Error finalizing transfer");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
var jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("hash"))
|
||||
{
|
||||
var txid = jObject["hash"].ToString();
|
||||
var notify = new NotifyForm("Finalized domain", "Explorer", Main.TXExplorer + txid);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
AddDomainInfo("closed");
|
||||
}
|
||||
else
|
||||
{
|
||||
var notify = new NotifyForm("Error finalizing domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonCancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
var path = "wallet/" + Main.Account + "/cancel";
|
||||
var content = "{\"passphrase\": \"" + Main.Password + "\", \"name\": \"" + Domain +
|
||||
"\", \"broadcast\": true, \"sign\": true}";
|
||||
var response = Main.APIPost(path, true, content).Result;
|
||||
if (response == "Error")
|
||||
{
|
||||
var notify = new NotifyForm("Error cancelling transfer");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
var jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("hash"))
|
||||
{
|
||||
var txid = jObject["hash"].ToString();
|
||||
var notify = new NotifyForm("Canceled transfer", "Explorer", Main.TXExplorer + txid);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
AddDomainInfo("closed");
|
||||
}
|
||||
else
|
||||
{
|
||||
var notify = new NotifyForm("Error cancelling transfer");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void AddDomainInfo(string status)
|
||||
{
|
||||
if (File.Exists(Main.dir + "domains.json"))
|
||||
{
|
||||
var found = false;
|
||||
var domains = JArray.Parse(File.ReadAllText(Main.dir + "domains.json"));
|
||||
foreach (JObject domain in domains)
|
||||
{
|
||||
if (domain["name"].ToString() == Domain)
|
||||
{
|
||||
found = true;
|
||||
if (domain.ContainsKey("status"))
|
||||
{
|
||||
switch (domain["status"].ToString())
|
||||
{
|
||||
case "transferring":
|
||||
buttonFinalize.Visible = true;
|
||||
buttonCancel.Visible = true;
|
||||
buttonTransfer.Visible = false;
|
||||
textBoxTransferAddress.Visible = false;
|
||||
break;
|
||||
case "closed":
|
||||
buttonCancel.Visible = false;
|
||||
buttonFinalize.Visible = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void buttonRenew_Click(object sender, EventArgs e)
|
||||
{
|
||||
string content = "{\"method\": \"renew\", \"params\": [\"" + Domain + "\"]}";
|
||||
string response = await Main.APIPost("", true, content);
|
||||
if (response == "Error")
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error renewing domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
JObject jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("result"))
|
||||
{
|
||||
Main.AddLog(jObject["result"].ToString());
|
||||
JObject result = (JObject)jObject["result"];
|
||||
if (result.ContainsKey("txid"))
|
||||
{
|
||||
string txid = result["txid"].ToString();
|
||||
NotifyForm notify = new NotifyForm("Renewed domain", "Explorer", Main.TXExplorer + txid);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error renewing domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error renewing domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
Main.AddLog(jObject.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private async void buttonTransfer_Click(object sender, EventArgs e)
|
||||
{
|
||||
string address = textBoxTransferAddress.Text;
|
||||
bool valid = await Main.ValidAddress(address);
|
||||
if (!valid)
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Invalid address");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
string path = "wallet/" + Main.Account + "/transfer";
|
||||
string content = "{\"passphrase\": \"" + Main.Password + "\", \"name\": \"" + Domain + "\", \"broadcast\": true, \"sign\": true, \"address\": \"" + address + "\"}";
|
||||
string response = await Main.APIPost(path, true, content);
|
||||
if (response == "Error")
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error transferring domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
JObject jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("hash"))
|
||||
{
|
||||
string txid = jObject["hash"].ToString();
|
||||
NotifyForm notify = new NotifyForm("Transferred domain", "Explorer", Main.TXExplorer + txid);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
AddDomainInfo("transferring");
|
||||
}
|
||||
else
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error transferring domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void buttonFinalize_Click(object sender, EventArgs e)
|
||||
{
|
||||
string path = "wallet/" + Main.Account + "/finalize";
|
||||
string content = "{\"passphrase\": \"" + Main.Password + "\", \"name\": \"" + Domain + "\", \"broadcast\": true, \"sign\": true}";
|
||||
string response = Main.APIPost(path, true, content).Result;
|
||||
if (response == "Error")
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error finalizing transfer");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
JObject jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("hash"))
|
||||
{
|
||||
string txid = jObject["hash"].ToString();
|
||||
NotifyForm notify = new NotifyForm("Finalized domain", "Explorer", Main.TXExplorer + txid);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
AddDomainInfo("closed");
|
||||
}
|
||||
else
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error finalizing domain");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
private void buttonCancel_Click(object sender, EventArgs e)
|
||||
{
|
||||
string path = "wallet/" + Main.Account + "/cancel";
|
||||
string content = "{\"passphrase\": \"" + Main.Password + "\", \"name\": \"" + Domain + "\", \"broadcast\": true, \"sign\": true}";
|
||||
string response = Main.APIPost(path, true, content).Result;
|
||||
if (response == "Error")
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error cancelling transfer");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
JObject jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("hash"))
|
||||
{
|
||||
string txid = jObject["hash"].ToString();
|
||||
NotifyForm notify = new NotifyForm("Canceled transfer", "Explorer", Main.TXExplorer + txid);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
AddDomainInfo("closed");
|
||||
}
|
||||
else
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error cancelling transfer");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void AddDomainInfo(string status)
|
||||
{
|
||||
if (File.Exists(Main.dir + "domains.json"))
|
||||
{
|
||||
bool found = false;
|
||||
JArray domains = JArray.Parse(File.ReadAllText(Main.dir + "domains.json"));
|
||||
foreach (JObject domain in domains)
|
||||
{
|
||||
if (domain["name"].ToString() == Domain)
|
||||
{
|
||||
found = true;
|
||||
if (domain.ContainsKey("status"))
|
||||
{
|
||||
domain["status"] = status;
|
||||
}
|
||||
else
|
||||
{
|
||||
domain.Add("status", status);
|
||||
}
|
||||
}
|
||||
domain["status"] = status;
|
||||
else
|
||||
domain.Add("status", status);
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
JObject domain = new JObject();
|
||||
domain["name"] = Domain;
|
||||
domain["status"] = status;
|
||||
domains.Add(domain);
|
||||
}
|
||||
File.WriteAllText(Main.dir + "domains.json", domains.ToString());
|
||||
}
|
||||
else
|
||||
if (!found)
|
||||
{
|
||||
JArray domains = new JArray();
|
||||
JObject domain = new JObject();
|
||||
var domain = new JObject();
|
||||
domain["name"] = Domain;
|
||||
domain["status"] = status;
|
||||
domains.Add(domain);
|
||||
File.WriteAllText(Main.dir + "domains.json", domains.ToString());
|
||||
}
|
||||
|
||||
File.WriteAllText(Main.dir + "domains.json", domains.ToString());
|
||||
}
|
||||
|
||||
private async void buttonSign_Click(object sender, EventArgs e)
|
||||
else
|
||||
{
|
||||
if (buttonSign.Text == "Save")
|
||||
{
|
||||
SaveFileDialog saveFileDialog = new SaveFileDialog();
|
||||
saveFileDialog.Filter = "Text File|*.txt";
|
||||
saveFileDialog.Title = "Save Signature";
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
JObject signature = new JObject();
|
||||
signature["domain"] = Domain;
|
||||
signature["message"] = textBoxSignMessage.Text;
|
||||
signature["signature"] = textBoxSignature.Text;
|
||||
signature["time"] = DateTime.Now.ToString();
|
||||
File.WriteAllText(saveFileDialog.FileName, signature.ToString());
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
if (textBoxSignMessage.Text == "")
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Enter a message to sign");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
string content = "{\"method\": \"signmessagewithname\", \"params\": [\"" + Domain + "\", \"" + textBoxSignMessage.Text + "\"]}";
|
||||
string response = await Main.APIPost("", true, content);
|
||||
if (response == "Error")
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Error signing message");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
JObject jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("result"))
|
||||
{
|
||||
textBoxSignature.Text = jObject["result"].ToString();
|
||||
buttonSign.Text = "Save";
|
||||
}
|
||||
else
|
||||
{
|
||||
Main.AddLog(response);
|
||||
NotifyForm notify = new NotifyForm("Error signing message");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void textBoxSignMessage_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
buttonSign.Text = "Sign";
|
||||
var domains = new JArray();
|
||||
var domain = new JObject();
|
||||
domain["name"] = Domain;
|
||||
domain["status"] = status;
|
||||
domains.Add(domain);
|
||||
File.WriteAllText(Main.dir + "domains.json", domains.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
private async void buttonSign_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (buttonSign.Text == "Save")
|
||||
{
|
||||
var saveFileDialog = new SaveFileDialog();
|
||||
saveFileDialog.Filter = "Text File|*.txt";
|
||||
saveFileDialog.Title = "Save Signature";
|
||||
if (saveFileDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
var signature = new JObject();
|
||||
signature["domain"] = Domain;
|
||||
signature["message"] = textBoxSignMessage.Text;
|
||||
signature["signature"] = textBoxSignature.Text;
|
||||
signature["time"] = DateTime.Now.ToString();
|
||||
File.WriteAllText(saveFileDialog.FileName, signature.ToString());
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (textBoxSignMessage.Text == "")
|
||||
{
|
||||
var notify = new NotifyForm("Enter a message to sign");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
var content = "{\"method\": \"signmessagewithname\", \"params\": [\"" + Domain + "\", \"" +
|
||||
textBoxSignMessage.Text + "\"]}";
|
||||
var response = await Main.APIPost("", true, content);
|
||||
if (response == "Error")
|
||||
{
|
||||
var notify = new NotifyForm("Error signing message");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
var jObject = JObject.Parse(response);
|
||||
if (jObject.ContainsKey("result"))
|
||||
{
|
||||
textBoxSignature.Text = jObject["result"].ToString();
|
||||
buttonSign.Text = "Save";
|
||||
}
|
||||
else
|
||||
{
|
||||
Main.AddLog(response);
|
||||
var notify = new NotifyForm("Error signing message");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
private void textBoxSignMessage_TextChanged(object sender, EventArgs e)
|
||||
{
|
||||
buttonSign.Text = "Sign";
|
||||
}
|
||||
}
|
@ -1,59 +1,56 @@
|
||||
using FireWallet;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace FireWalletLite
|
||||
namespace FireWalletLite;
|
||||
|
||||
public partial class FirstLoginForm : Form
|
||||
{
|
||||
public partial class FirstLoginForm : Form
|
||||
private readonly MainForm main;
|
||||
private string seedPhrase;
|
||||
|
||||
public FirstLoginForm(string seedPhrase, MainForm mainForm)
|
||||
{
|
||||
String seedPhrase;
|
||||
MainForm main;
|
||||
public FirstLoginForm(string seedPhrase, MainForm mainForm)
|
||||
InitializeComponent();
|
||||
this.seedPhrase = seedPhrase;
|
||||
main = mainForm;
|
||||
// Theme form
|
||||
BackColor = ColorTranslator.FromHtml(mainForm.Theme["background"]);
|
||||
ForeColor = ColorTranslator.FromHtml(mainForm.Theme["foreground"]);
|
||||
foreach (Control control in Controls) mainForm.ThemeControl(control);
|
||||
textBoxSeed.Text = seedPhrase;
|
||||
}
|
||||
|
||||
private async void Start_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (textBoxPassword.Text.Length < 8)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.seedPhrase = seedPhrase;
|
||||
this.main = mainForm;
|
||||
// Theme form
|
||||
this.BackColor = ColorTranslator.FromHtml(mainForm.Theme["background"]);
|
||||
this.ForeColor = ColorTranslator.FromHtml(mainForm.Theme["foreground"]);
|
||||
foreach (Control control in Controls)
|
||||
{
|
||||
mainForm.ThemeControl(control);
|
||||
}
|
||||
textBoxSeed.Text = seedPhrase;
|
||||
var notifyForm = new NotifyForm("Please choose a longer password!");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
private async void Start_Click(object sender, EventArgs e)
|
||||
if (textBoxPassword.Text != textBoxPassword2.Text)
|
||||
{
|
||||
if (textBoxPassword.Text.Length < 8)
|
||||
{
|
||||
NotifyForm notifyForm = new NotifyForm("Please choose a longer password!");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
return;
|
||||
}
|
||||
if (textBoxPassword.Text != textBoxPassword2.Text)
|
||||
{
|
||||
NotifyForm notifyForm = new NotifyForm("Passwords do not match!");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
// Encrypt wallet
|
||||
string content = "{\"method\":\"encryptwallet\",\"params\":[\"" + textBoxPassword.Text + "\"]}";
|
||||
string response = await main.APIPost("",true,content);
|
||||
main.AddLog("Encrypt wallet: " + response);
|
||||
JObject jObject = JObject.Parse(response);
|
||||
if (jObject["error"].ToString() != "")
|
||||
{
|
||||
NotifyForm notifyForm = new NotifyForm("Error encrypting wallet: " + jObject["error"].ToString());
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
return;
|
||||
} else
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
var notifyForm = new NotifyForm("Passwords do not match!");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
// Encrypt wallet
|
||||
var content = "{\"method\":\"encryptwallet\",\"params\":[\"" + textBoxPassword.Text + "\"]}";
|
||||
var response = await main.APIPost("", true, content);
|
||||
main.AddLog("Encrypt wallet: " + response);
|
||||
var jObject = JObject.Parse(response);
|
||||
if (jObject["error"].ToString() != "")
|
||||
{
|
||||
var notifyForm = new NotifyForm("Error encrypting wallet: " + jObject["error"]);
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
Close();
|
||||
}
|
||||
}
|
@ -2,237 +2,243 @@ using System.Diagnostics;
|
||||
using System.Text.RegularExpressions;
|
||||
using FireWallet;
|
||||
|
||||
namespace FireWalletLite
|
||||
namespace FireWalletLite;
|
||||
|
||||
public partial class Loader : Form
|
||||
{
|
||||
public partial class Loader : Form
|
||||
public Loader()
|
||||
{
|
||||
#region Constants
|
||||
MainForm mainForm = new MainForm();
|
||||
bool hideScreen = true;
|
||||
Process HSDProcess;
|
||||
#endregion
|
||||
InitializeComponent();
|
||||
|
||||
public Loader()
|
||||
var splashScreen = new SplashScreen(false);
|
||||
splashScreen.Show();
|
||||
Application.DoEvents();
|
||||
var start = DateTime.Now;
|
||||
// Install and load node
|
||||
var dir = mainForm.dir;
|
||||
HSDProcess = new Process();
|
||||
if (!Directory.Exists(dir)) Environment.Exit(1);
|
||||
var hsdPath = dir + "hsd\\bin\\hsd.exe";
|
||||
if (!Directory.Exists(dir + "hsd"))
|
||||
{
|
||||
InitializeComponent();
|
||||
var repositoryUrl = "https://github.com/handshake-org/hsd.git";
|
||||
var destinationPath = dir + "hsd";
|
||||
CloneRepository(repositoryUrl, destinationPath);
|
||||
}
|
||||
|
||||
SplashScreen splashScreen = new SplashScreen(false);
|
||||
splashScreen.Show();
|
||||
// Start HSD
|
||||
HSDProcess.StartInfo.RedirectStandardInput = true;
|
||||
HSDProcess.StartInfo.RedirectStandardOutput = false;
|
||||
HSDProcess.StartInfo.UseShellExecute = false;
|
||||
HSDProcess.StartInfo.FileName = "node.exe";
|
||||
HSDProcess.StartInfo.Arguments = dir + "hsd\\bin\\hsd --agent=FireWallet --spv --prefix " + dir + "\\hsd_data";
|
||||
HSDProcess.StartInfo.CreateNoWindow = hideScreen;
|
||||
if (hideScreen)
|
||||
{
|
||||
HSDProcess.StartInfo.RedirectStandardError = true;
|
||||
// Send errors to log
|
||||
HSDProcess.ErrorDataReceived += (sender, e) => mainForm.AddLog("HSD Error: " + e.Data);
|
||||
}
|
||||
else
|
||||
{
|
||||
HSDProcess.StartInfo.RedirectStandardError = false;
|
||||
}
|
||||
|
||||
HSDProcess.Start();
|
||||
while ((DateTime.Now - start).TotalSeconds < 5)
|
||||
{
|
||||
Thread.Sleep(10);
|
||||
Application.DoEvents();
|
||||
DateTime start = DateTime.Now;
|
||||
// Install and load node
|
||||
string dir = mainForm.dir;
|
||||
HSDProcess = new Process();
|
||||
if (!Directory.Exists(dir)) Environment.Exit(1);
|
||||
string hsdPath = dir + "hsd\\bin\\hsd.exe";
|
||||
if (!Directory.Exists(dir + "hsd"))
|
||||
}
|
||||
|
||||
splashScreen.CloseSplash();
|
||||
while (!splashScreen.IsClosed)
|
||||
{
|
||||
Thread.Sleep(10);
|
||||
Application.DoEvents();
|
||||
}
|
||||
|
||||
splashScreen.Dispose();
|
||||
mainForm.Show();
|
||||
}
|
||||
|
||||
#region Constants
|
||||
|
||||
private readonly MainForm mainForm = new();
|
||||
private readonly bool hideScreen = true;
|
||||
private readonly Process HSDProcess;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Git
|
||||
|
||||
public void CloneRepository(string repositoryUrl, string destinationPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Check if git is installed
|
||||
var testInstalled = new Process();
|
||||
testInstalled.StartInfo.FileName = "git";
|
||||
testInstalled.StartInfo.Arguments = "-v";
|
||||
testInstalled.StartInfo.RedirectStandardOutput = true;
|
||||
testInstalled.StartInfo.UseShellExecute = false;
|
||||
testInstalled.StartInfo.CreateNoWindow = true;
|
||||
testInstalled.Start();
|
||||
var outputInstalled = testInstalled.StandardOutput.ReadToEnd();
|
||||
testInstalled.WaitForExit();
|
||||
|
||||
if (!outputInstalled.Contains("git version"))
|
||||
{
|
||||
string repositoryUrl = "https://github.com/handshake-org/hsd.git";
|
||||
string destinationPath = dir + "hsd";
|
||||
CloneRepository(repositoryUrl, destinationPath);
|
||||
mainForm.AddLog("Git is not installed");
|
||||
var notifyForm = new NotifyForm("Git is not installed\nPlease install it to install HSD dependencies",
|
||||
"Install", "https://git-scm.com/download/win");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
Environment.Exit(21);
|
||||
return;
|
||||
}
|
||||
// Start HSD
|
||||
HSDProcess.StartInfo.RedirectStandardInput = true;
|
||||
HSDProcess.StartInfo.RedirectStandardOutput = false;
|
||||
HSDProcess.StartInfo.UseShellExecute = false;
|
||||
HSDProcess.StartInfo.FileName = "node.exe";
|
||||
HSDProcess.StartInfo.Arguments = dir + "hsd\\bin\\hsd --agent=FireWallet --spv --prefix " + dir + "\\hsd_data";
|
||||
HSDProcess.StartInfo.CreateNoWindow = hideScreen;
|
||||
if (hideScreen)
|
||||
|
||||
// Check if node installed
|
||||
testInstalled = new Process();
|
||||
testInstalled.StartInfo.FileName = "node";
|
||||
testInstalled.StartInfo.Arguments = "-v";
|
||||
testInstalled.StartInfo.RedirectStandardOutput = true;
|
||||
testInstalled.StartInfo.UseShellExecute = false;
|
||||
testInstalled.StartInfo.CreateNoWindow = true;
|
||||
testInstalled.Start();
|
||||
outputInstalled = testInstalled.StandardOutput.ReadToEnd();
|
||||
testInstalled.WaitForExit();
|
||||
|
||||
if (!outputInstalled.Contains("v"))
|
||||
{
|
||||
HSDProcess.StartInfo.RedirectStandardError = true;
|
||||
// Send errors to log
|
||||
HSDProcess.ErrorDataReceived += (sender, e) => mainForm.AddLog("HSD Error: " + e.Data);
|
||||
mainForm.AddLog("Node is not installed");
|
||||
var notifyForm = new NotifyForm("Node is not installed\nPlease install it to install HSD dependencies",
|
||||
"Install", "https://nodejs.org/en/download");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
Environment.Exit(22);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Check if npm installed
|
||||
testInstalled = new Process();
|
||||
testInstalled.StartInfo.FileName = "cmd.exe";
|
||||
testInstalled.StartInfo.Arguments = "npm -v";
|
||||
testInstalled.StartInfo.RedirectStandardOutput = true;
|
||||
testInstalled.StartInfo.UseShellExecute = false;
|
||||
testInstalled.StartInfo.CreateNoWindow = false;
|
||||
testInstalled.Start();
|
||||
// Wait 3 seconds and then kill
|
||||
Thread.Sleep(3000);
|
||||
testInstalled.Kill();
|
||||
outputInstalled = testInstalled.StandardOutput.ReadToEnd();
|
||||
testInstalled.WaitForExit();
|
||||
if (Regex.IsMatch(outputInstalled, @"^\d+\.\d+\.\d+$"))
|
||||
{
|
||||
mainForm.AddLog("NPM is not installed");
|
||||
mainForm.AddLog(outputInstalled);
|
||||
var notifyForm = new NotifyForm("NPM is not installed\nPlease install it to install HSD dependencies",
|
||||
"Install", "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
Environment.Exit(23);
|
||||
return;
|
||||
}
|
||||
|
||||
mainForm.AddLog("Prerequisites installed");
|
||||
|
||||
var startInfo = new ProcessStartInfo();
|
||||
startInfo.FileName = "git";
|
||||
startInfo.Arguments = $"clone {repositoryUrl} {destinationPath}";
|
||||
|
||||
if (repositoryUrl == "https://github.com/handshake-org/hsd.git")
|
||||
startInfo.Arguments = $"clone --depth 1 --branch latest {repositoryUrl} {destinationPath}";
|
||||
|
||||
startInfo.RedirectStandardOutput = true;
|
||||
startInfo.UseShellExecute = false;
|
||||
startInfo.CreateNoWindow = hideScreen;
|
||||
|
||||
var process = new Process();
|
||||
process.StartInfo = startInfo;
|
||||
process.Start();
|
||||
|
||||
var output = process.StandardOutput.ReadToEnd();
|
||||
process.WaitForExit();
|
||||
|
||||
while (!process.HasExited) output += process.StandardOutput.ReadToEnd();
|
||||
var psiNpmRunDist = new ProcessStartInfo
|
||||
{
|
||||
FileName = "cmd",
|
||||
RedirectStandardInput = true,
|
||||
WorkingDirectory = destinationPath,
|
||||
CreateNoWindow = hideScreen
|
||||
};
|
||||
var pNpmRunDist = Process.Start(psiNpmRunDist);
|
||||
pNpmRunDist.StandardInput.WriteLine("npm install & exit");
|
||||
pNpmRunDist.WaitForExit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mainForm.AddLog("Git/NPM Install FAILED");
|
||||
mainForm.AddLog(ex.Message);
|
||||
if (ex.Message.Contains("to start process 'git'"))
|
||||
{
|
||||
var notifyForm = new NotifyForm("Git needs to be installed\nCheck logs for more details");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
}
|
||||
else if (ex.Message.Contains("to start process 'node'"))
|
||||
{
|
||||
var notifyForm = new NotifyForm("Node needs to be installed\nCheck logs for more details");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
}
|
||||
else if (ex.Message.Contains("to start process 'npm'"))
|
||||
{
|
||||
var notifyForm = new NotifyForm("NPM needs to be installed\nCheck logs for more details");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
HSDProcess.StartInfo.RedirectStandardError = false;
|
||||
var notifyForm = new NotifyForm("Git/NPM Install FAILED\nCheck logs for more details");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
}
|
||||
HSDProcess.Start();
|
||||
while ((DateTime.Now - start).TotalSeconds < 5)
|
||||
{
|
||||
Thread.Sleep(10);
|
||||
Application.DoEvents();
|
||||
}
|
||||
splashScreen.CloseSplash();
|
||||
while (!splashScreen.IsClosed)
|
||||
{
|
||||
Thread.Sleep(10);
|
||||
Application.DoEvents();
|
||||
}
|
||||
splashScreen.Dispose();
|
||||
mainForm.Show();
|
||||
|
||||
Environment.Exit(24);
|
||||
}
|
||||
#region Git
|
||||
public void CloneRepository(string repositoryUrl, string destinationPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Check if git is installed
|
||||
Process testInstalled = new Process();
|
||||
testInstalled.StartInfo.FileName = "git";
|
||||
testInstalled.StartInfo.Arguments = "-v";
|
||||
testInstalled.StartInfo.RedirectStandardOutput = true;
|
||||
testInstalled.StartInfo.UseShellExecute = false;
|
||||
testInstalled.StartInfo.CreateNoWindow = true;
|
||||
testInstalled.Start();
|
||||
string outputInstalled = testInstalled.StandardOutput.ReadToEnd();
|
||||
testInstalled.WaitForExit();
|
||||
|
||||
if (!outputInstalled.Contains("git version"))
|
||||
{
|
||||
mainForm.AddLog("Git is not installed");
|
||||
NotifyForm notifyForm = new NotifyForm("Git is not installed\nPlease install it to install HSD dependencies", "Install", "https://git-scm.com/download/win");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
Environment.Exit(21);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if node installed
|
||||
testInstalled = new Process();
|
||||
testInstalled.StartInfo.FileName = "node";
|
||||
testInstalled.StartInfo.Arguments = "-v";
|
||||
testInstalled.StartInfo.RedirectStandardOutput = true;
|
||||
testInstalled.StartInfo.UseShellExecute = false;
|
||||
testInstalled.StartInfo.CreateNoWindow = true;
|
||||
testInstalled.Start();
|
||||
outputInstalled = testInstalled.StandardOutput.ReadToEnd();
|
||||
testInstalled.WaitForExit();
|
||||
|
||||
if (!outputInstalled.Contains("v"))
|
||||
{
|
||||
mainForm.AddLog("Node is not installed");
|
||||
NotifyForm notifyForm = new NotifyForm("Node is not installed\nPlease install it to install HSD dependencies", "Install", "https://nodejs.org/en/download");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
Environment.Exit(22);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Check if npm installed
|
||||
testInstalled = new Process();
|
||||
testInstalled.StartInfo.FileName = "cmd.exe";
|
||||
testInstalled.StartInfo.Arguments = "npm -v";
|
||||
testInstalled.StartInfo.RedirectStandardOutput = true;
|
||||
testInstalled.StartInfo.UseShellExecute = false;
|
||||
testInstalled.StartInfo.CreateNoWindow = false;
|
||||
testInstalled.Start();
|
||||
// Wait 3 seconds and then kill
|
||||
Thread.Sleep(3000);
|
||||
testInstalled.Kill();
|
||||
outputInstalled = testInstalled.StandardOutput.ReadToEnd();
|
||||
testInstalled.WaitForExit();
|
||||
if (Regex.IsMatch(outputInstalled, @"^\d+\.\d+\.\d+$"))
|
||||
{
|
||||
mainForm.AddLog("NPM is not installed");
|
||||
mainForm.AddLog(outputInstalled);
|
||||
NotifyForm notifyForm = new NotifyForm("NPM is not installed\nPlease install it to install HSD dependencies", "Install", "https://docs.npmjs.com/downloading-and-installing-node-js-and-npm");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
Environment.Exit(23);
|
||||
return;
|
||||
}
|
||||
|
||||
mainForm.AddLog("Prerequisites installed");
|
||||
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo();
|
||||
startInfo.FileName = "git";
|
||||
startInfo.Arguments = $"clone {repositoryUrl} {destinationPath}";
|
||||
|
||||
if (repositoryUrl == "https://github.com/handshake-org/hsd.git")
|
||||
{
|
||||
startInfo.Arguments = $"clone --depth 1 --branch latest {repositoryUrl} {destinationPath}";
|
||||
}
|
||||
|
||||
startInfo.RedirectStandardOutput = true;
|
||||
startInfo.UseShellExecute = false;
|
||||
startInfo.CreateNoWindow = hideScreen;
|
||||
|
||||
Process process = new Process();
|
||||
process.StartInfo = startInfo;
|
||||
process.Start();
|
||||
|
||||
string output = process.StandardOutput.ReadToEnd();
|
||||
process.WaitForExit();
|
||||
|
||||
while (!process.HasExited)
|
||||
{
|
||||
output += process.StandardOutput.ReadToEnd();
|
||||
}
|
||||
var psiNpmRunDist = new ProcessStartInfo
|
||||
{
|
||||
FileName = "cmd",
|
||||
RedirectStandardInput = true,
|
||||
WorkingDirectory = destinationPath,
|
||||
CreateNoWindow = hideScreen
|
||||
};
|
||||
var pNpmRunDist = Process.Start(psiNpmRunDist);
|
||||
pNpmRunDist.StandardInput.WriteLine("npm install & exit");
|
||||
pNpmRunDist.WaitForExit();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
mainForm.AddLog("Git/NPM Install FAILED");
|
||||
mainForm.AddLog(ex.Message);
|
||||
if (ex.Message.Contains("to start process 'git'"))
|
||||
{
|
||||
NotifyForm notifyForm = new NotifyForm("Git needs to be installed\nCheck logs for more details");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
}
|
||||
else if (ex.Message.Contains("to start process 'node'"))
|
||||
{
|
||||
NotifyForm notifyForm = new NotifyForm("Node needs to be installed\nCheck logs for more details");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
}
|
||||
else if (ex.Message.Contains("to start process 'npm'"))
|
||||
{
|
||||
NotifyForm notifyForm = new NotifyForm("NPM needs to be installed\nCheck logs for more details");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
NotifyForm notifyForm = new NotifyForm("Git/NPM Install FAILED\nCheck logs for more details");
|
||||
notifyForm.ShowDialog();
|
||||
notifyForm.Dispose();
|
||||
}
|
||||
Environment.Exit(24);
|
||||
}
|
||||
}
|
||||
public bool CheckNodeInstalled()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Create a new process to execute the 'node' command
|
||||
Process process = new Process();
|
||||
process.StartInfo.FileName = "node";
|
||||
process.StartInfo.Arguments = "--version";
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.CreateNoWindow = true;
|
||||
|
||||
// Start the process and read the output
|
||||
process.Start();
|
||||
string output = process.StandardOutput.ReadToEnd();
|
||||
|
||||
// Wait for the process to exit
|
||||
process.WaitForExit();
|
||||
|
||||
// Check if the output contains a version number
|
||||
return !string.IsNullOrEmpty(output);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// An exception occurred, indicating that 'node' is not installed or accessible
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
public bool CheckNodeInstalled()
|
||||
{
|
||||
try
|
||||
{
|
||||
// Create a new process to execute the 'node' command
|
||||
var process = new Process();
|
||||
process.StartInfo.FileName = "node";
|
||||
process.StartInfo.Arguments = "--version";
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.CreateNoWindow = true;
|
||||
|
||||
// Start the process and read the output
|
||||
process.Start();
|
||||
var output = process.StandardOutput.ReadToEnd();
|
||||
|
||||
// Wait for the process to exit
|
||||
process.WaitForExit();
|
||||
|
||||
// Check if the output contains a version number
|
||||
return !string.IsNullOrEmpty(output);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// An exception occurred, indicating that 'node' is not installed or accessible
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -1,266 +1,249 @@
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace FireWallet
|
||||
namespace FireWallet;
|
||||
|
||||
public partial class NotifyForm : Form
|
||||
{
|
||||
public partial class NotifyForm : Form
|
||||
private bool allowClose = true;
|
||||
private readonly string altLink;
|
||||
|
||||
private readonly string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) +
|
||||
"\\FireWallet\\";
|
||||
|
||||
private readonly bool Linkcopy;
|
||||
private Dictionary<string, string> theme;
|
||||
|
||||
public NotifyForm(string Message)
|
||||
{
|
||||
string dir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\FireWallet\\";
|
||||
Dictionary<string, string> theme;
|
||||
string altLink;
|
||||
bool Linkcopy;
|
||||
bool allowClose = true;
|
||||
public NotifyForm(string Message)
|
||||
InitializeComponent();
|
||||
labelmessage.Text = Message;
|
||||
altLink = "";
|
||||
}
|
||||
|
||||
public NotifyForm(string Message, string altText, string altLink)
|
||||
{
|
||||
InitializeComponent();
|
||||
labelmessage.Text = Message;
|
||||
buttonALT.Text = altText;
|
||||
buttonALT.Visible = true;
|
||||
this.altLink = altLink;
|
||||
buttonOK.Focus();
|
||||
Linkcopy = false;
|
||||
}
|
||||
|
||||
public NotifyForm(string Message, bool allowClose)
|
||||
{
|
||||
InitializeComponent();
|
||||
labelmessage.Text = Message;
|
||||
buttonOK.Focus();
|
||||
Linkcopy = false;
|
||||
buttonOK.Visible = allowClose;
|
||||
allowClose = allowClose;
|
||||
}
|
||||
|
||||
public NotifyForm(string Message, string altText, string altLink, bool Linkcopy)
|
||||
{
|
||||
InitializeComponent();
|
||||
labelmessage.Text = Message;
|
||||
buttonALT.Text = altText;
|
||||
buttonALT.Visible = true;
|
||||
this.altLink = altLink;
|
||||
buttonOK.Focus();
|
||||
this.Linkcopy = Linkcopy;
|
||||
|
||||
if (Linkcopy)
|
||||
// Small font to fix more data
|
||||
labelmessage.Font = new Font(labelmessage.Font.FontFamily, 10);
|
||||
}
|
||||
|
||||
public void CloseNotification()
|
||||
{
|
||||
Close();
|
||||
}
|
||||
|
||||
private void NotifyForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
UpdateTheme();
|
||||
}
|
||||
|
||||
private void OK_Click(object sender, EventArgs e)
|
||||
{
|
||||
allowClose = true;
|
||||
Close();
|
||||
}
|
||||
|
||||
private void buttonALT_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Linkcopy)
|
||||
{
|
||||
InitializeComponent();
|
||||
labelmessage.Text = Message;
|
||||
altLink = "";
|
||||
}
|
||||
public void CloseNotification()
|
||||
{
|
||||
this.Close();
|
||||
}
|
||||
public NotifyForm(string Message, string altText, string altLink)
|
||||
{
|
||||
InitializeComponent();
|
||||
labelmessage.Text = Message;
|
||||
buttonALT.Text = altText;
|
||||
buttonALT.Visible = true;
|
||||
this.altLink = altLink;
|
||||
buttonOK.Focus();
|
||||
Linkcopy = false;
|
||||
}
|
||||
public NotifyForm(string Message, bool allowClose)
|
||||
{
|
||||
InitializeComponent();
|
||||
labelmessage.Text = Message;
|
||||
buttonOK.Focus();
|
||||
Linkcopy = false;
|
||||
buttonOK.Visible = allowClose;
|
||||
allowClose = allowClose;
|
||||
// Copy link to clipboard
|
||||
Clipboard.SetText(altLink);
|
||||
return;
|
||||
}
|
||||
|
||||
public NotifyForm(string Message, string altText, string altLink, bool Linkcopy)
|
||||
// Open link
|
||||
var psi = new ProcessStartInfo
|
||||
{
|
||||
InitializeComponent();
|
||||
labelmessage.Text = Message;
|
||||
buttonALT.Text = altText;
|
||||
buttonALT.Visible = true;
|
||||
this.altLink = altLink;
|
||||
buttonOK.Focus();
|
||||
this.Linkcopy = Linkcopy;
|
||||
FileName = altLink,
|
||||
UseShellExecute = true
|
||||
};
|
||||
Process.Start(psi);
|
||||
}
|
||||
|
||||
if (Linkcopy)
|
||||
{
|
||||
// Small font to fix more data
|
||||
labelmessage.Font = new Font(labelmessage.Font.FontFamily, 10);
|
||||
}
|
||||
private void NotifyForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (!allowClose) e.Cancel = true;
|
||||
}
|
||||
|
||||
#region Theming
|
||||
|
||||
private void UpdateTheme()
|
||||
{
|
||||
// Check if file exists
|
||||
if (!Directory.Exists(dir)) CreateConfig(dir);
|
||||
if (!File.Exists(dir + "theme.txt")) CreateConfig(dir);
|
||||
|
||||
// Read file
|
||||
var sr = new StreamReader(dir + "theme.txt");
|
||||
theme = new Dictionary<string, string>();
|
||||
while (!sr.EndOfStream)
|
||||
{
|
||||
var line = sr.ReadLine();
|
||||
var split = line.Split(':');
|
||||
theme.Add(split[0].Trim(), split[1].Trim());
|
||||
}
|
||||
|
||||
#region Theming
|
||||
private void UpdateTheme()
|
||||
sr.Dispose();
|
||||
|
||||
if (!theme.ContainsKey("background") || !theme.ContainsKey("background-alt") ||
|
||||
!theme.ContainsKey("foreground") || !theme.ContainsKey("foreground-alt")) return;
|
||||
|
||||
// Apply theme
|
||||
BackColor = ColorTranslator.FromHtml(theme["background"]);
|
||||
|
||||
// Foreground
|
||||
ForeColor = ColorTranslator.FromHtml(theme["foreground"]);
|
||||
|
||||
|
||||
// Need to specify this for each groupbox to override the black text
|
||||
foreach (Control c in Controls) ThemeControl(c);
|
||||
|
||||
|
||||
// Transparancy
|
||||
applyTransparency(theme);
|
||||
}
|
||||
|
||||
private void ThemeControl(Control c)
|
||||
{
|
||||
if (c.GetType() == typeof(GroupBox) || c.GetType() == typeof(Panel))
|
||||
{
|
||||
// Check if file exists
|
||||
if (!Directory.Exists(dir))
|
||||
{
|
||||
CreateConfig(dir);
|
||||
}
|
||||
if (!File.Exists(dir + "theme.txt"))
|
||||
{
|
||||
CreateConfig(dir);
|
||||
}
|
||||
|
||||
// Read file
|
||||
StreamReader sr = new StreamReader(dir + "theme.txt");
|
||||
theme = new Dictionary<string, string>();
|
||||
while (!sr.EndOfStream)
|
||||
{
|
||||
string line = sr.ReadLine();
|
||||
string[] split = line.Split(':');
|
||||
theme.Add(split[0].Trim(), split[1].Trim());
|
||||
}
|
||||
sr.Dispose();
|
||||
|
||||
if (!theme.ContainsKey("background") || !theme.ContainsKey("background-alt") || !theme.ContainsKey("foreground") || !theme.ContainsKey("foreground-alt"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Apply theme
|
||||
this.BackColor = ColorTranslator.FromHtml(theme["background"]);
|
||||
|
||||
// Foreground
|
||||
this.ForeColor = ColorTranslator.FromHtml(theme["foreground"]);
|
||||
|
||||
|
||||
// Need to specify this for each groupbox to override the black text
|
||||
foreach (Control c in Controls)
|
||||
{
|
||||
ThemeControl(c);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Transparancy
|
||||
applyTransparency(theme);
|
||||
|
||||
|
||||
}
|
||||
private void ThemeControl(Control c)
|
||||
{
|
||||
if (c.GetType() == typeof(GroupBox) || c.GetType() == typeof(Panel))
|
||||
{
|
||||
c.ForeColor = ColorTranslator.FromHtml(theme["foreground"]);
|
||||
foreach (Control sub in c.Controls)
|
||||
{
|
||||
ThemeControl(sub);
|
||||
}
|
||||
}
|
||||
if (c.GetType() == typeof(TextBox) || c.GetType() == typeof(Button)
|
||||
|| c.GetType() == typeof(ComboBox) || c.GetType() == typeof(StatusStrip))
|
||||
{
|
||||
c.ForeColor = ColorTranslator.FromHtml(theme["foreground-alt"]);
|
||||
c.BackColor = ColorTranslator.FromHtml(theme["background-alt"]);
|
||||
}
|
||||
c.ForeColor = ColorTranslator.FromHtml(theme["foreground"]);
|
||||
foreach (Control sub in c.Controls) ThemeControl(sub);
|
||||
}
|
||||
|
||||
private void applyTransparency(Dictionary<string, string> theme)
|
||||
if (c.GetType() == typeof(TextBox) || c.GetType() == typeof(Button)
|
||||
|| c.GetType() == typeof(ComboBox) || c.GetType() == typeof(StatusStrip))
|
||||
{
|
||||
if (theme.ContainsKey("transparent-mode"))
|
||||
{
|
||||
switch (theme["transparent-mode"])
|
||||
{
|
||||
case "mica":
|
||||
var accent = new AccentPolicy { AccentState = AccentState.ACCENT_ENABLE_BLURBEHIND };
|
||||
var accentStructSize = Marshal.SizeOf(accent);
|
||||
var accentPtr = Marshal.AllocHGlobal(accentStructSize);
|
||||
Marshal.StructureToPtr(accent, accentPtr, false);
|
||||
var data = new WindowCompositionAttributeData
|
||||
{
|
||||
Attribute = WindowCompositionAttribute.WCA_ACCENT_POLICY,
|
||||
SizeOfData = accentStructSize,
|
||||
Data = accentPtr
|
||||
};
|
||||
User32.SetWindowCompositionAttribute(Handle, ref data);
|
||||
Marshal.FreeHGlobal(accentPtr);
|
||||
break;
|
||||
case "key":
|
||||
if (theme.ContainsKey("transparency-key"))
|
||||
{
|
||||
switch (theme["transparency-key"])
|
||||
{
|
||||
case "alt":
|
||||
this.TransparencyKey = ColorTranslator.FromHtml(theme["background-alt"]);
|
||||
break;
|
||||
case "main":
|
||||
this.TransparencyKey = ColorTranslator.FromHtml(theme["background"]);
|
||||
break;
|
||||
default:
|
||||
this.TransparencyKey = ColorTranslator.FromHtml(theme["transparency-key"]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "percent":
|
||||
if (theme.ContainsKey("transparency-percent"))
|
||||
{
|
||||
Opacity = Convert.ToDouble(theme["transparency-percent"]) / 100;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateConfig(string dir)
|
||||
{
|
||||
if (!Directory.Exists(dir))
|
||||
{
|
||||
Directory.CreateDirectory(dir);
|
||||
}
|
||||
StreamWriter sw = new StreamWriter(dir + "theme.txt");
|
||||
sw.WriteLine("background: #000000");
|
||||
sw.WriteLine("foreground: #8e05c2");
|
||||
sw.WriteLine("background-alt: #3e065f");
|
||||
sw.WriteLine("foreground-alt: #ffffff");
|
||||
sw.WriteLine("transparent-mode: off");
|
||||
sw.WriteLine("transparency-key: main");
|
||||
sw.WriteLine("transparency-percent: 90");
|
||||
|
||||
sw.Dispose();
|
||||
|
||||
}
|
||||
|
||||
// Required for mica effect
|
||||
internal enum AccentState
|
||||
{
|
||||
ACCENT_DISABLED = 0,
|
||||
ACCENT_ENABLE_GRADIENT = 1,
|
||||
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
|
||||
ACCENT_ENABLE_BLURBEHIND = 3,
|
||||
ACCENT_INVALID_STATE = 4
|
||||
}
|
||||
|
||||
internal enum WindowCompositionAttribute
|
||||
{
|
||||
WCA_ACCENT_POLICY = 19
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct AccentPolicy
|
||||
{
|
||||
public AccentState AccentState;
|
||||
public int AccentFlags;
|
||||
public int GradientColor;
|
||||
public int AnimationId;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct WindowCompositionAttributeData
|
||||
{
|
||||
public WindowCompositionAttribute Attribute;
|
||||
public IntPtr Data;
|
||||
public int SizeOfData;
|
||||
}
|
||||
|
||||
internal static class User32
|
||||
{
|
||||
[DllImport("user32.dll")]
|
||||
internal static extern int SetWindowCompositionAttribute(IntPtr hwnd, ref WindowCompositionAttributeData data);
|
||||
}
|
||||
#endregion
|
||||
|
||||
private void NotifyForm_Load(object sender, EventArgs e)
|
||||
{
|
||||
UpdateTheme();
|
||||
}
|
||||
|
||||
private void OK_Click(object sender, EventArgs e)
|
||||
{
|
||||
allowClose = true;
|
||||
this.Close();
|
||||
}
|
||||
|
||||
private void buttonALT_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (Linkcopy)
|
||||
{
|
||||
// Copy link to clipboard
|
||||
Clipboard.SetText(altLink);
|
||||
return;
|
||||
}
|
||||
// Open link
|
||||
ProcessStartInfo psi = new ProcessStartInfo
|
||||
{
|
||||
FileName = altLink,
|
||||
UseShellExecute = true
|
||||
};
|
||||
Process.Start(psi);
|
||||
}
|
||||
|
||||
private void NotifyForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (!allowClose) e.Cancel = true;
|
||||
c.ForeColor = ColorTranslator.FromHtml(theme["foreground-alt"]);
|
||||
c.BackColor = ColorTranslator.FromHtml(theme["background-alt"]);
|
||||
}
|
||||
}
|
||||
|
||||
private void applyTransparency(Dictionary<string, string> theme)
|
||||
{
|
||||
if (theme.ContainsKey("transparent-mode"))
|
||||
switch (theme["transparent-mode"])
|
||||
{
|
||||
case "mica":
|
||||
var accent = new AccentPolicy { AccentState = AccentState.ACCENT_ENABLE_BLURBEHIND };
|
||||
var accentStructSize = Marshal.SizeOf(accent);
|
||||
var accentPtr = Marshal.AllocHGlobal(accentStructSize);
|
||||
Marshal.StructureToPtr(accent, accentPtr, false);
|
||||
var data = new WindowCompositionAttributeData
|
||||
{
|
||||
Attribute = WindowCompositionAttribute.WCA_ACCENT_POLICY,
|
||||
SizeOfData = accentStructSize,
|
||||
Data = accentPtr
|
||||
};
|
||||
User32.SetWindowCompositionAttribute(Handle, ref data);
|
||||
Marshal.FreeHGlobal(accentPtr);
|
||||
break;
|
||||
case "key":
|
||||
if (theme.ContainsKey("transparency-key"))
|
||||
switch (theme["transparency-key"])
|
||||
{
|
||||
case "alt":
|
||||
TransparencyKey = ColorTranslator.FromHtml(theme["background-alt"]);
|
||||
break;
|
||||
case "main":
|
||||
TransparencyKey = ColorTranslator.FromHtml(theme["background"]);
|
||||
break;
|
||||
default:
|
||||
TransparencyKey = ColorTranslator.FromHtml(theme["transparency-key"]);
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
case "percent":
|
||||
if (theme.ContainsKey("transparency-percent"))
|
||||
Opacity = Convert.ToDouble(theme["transparency-percent"]) / 100;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateConfig(string dir)
|
||||
{
|
||||
if (!Directory.Exists(dir)) Directory.CreateDirectory(dir);
|
||||
var sw = new StreamWriter(dir + "theme.txt");
|
||||
sw.WriteLine("background: #000000");
|
||||
sw.WriteLine("foreground: #8e05c2");
|
||||
sw.WriteLine("background-alt: #3e065f");
|
||||
sw.WriteLine("foreground-alt: #ffffff");
|
||||
sw.WriteLine("transparent-mode: off");
|
||||
sw.WriteLine("transparency-key: main");
|
||||
sw.WriteLine("transparency-percent: 90");
|
||||
|
||||
sw.Dispose();
|
||||
}
|
||||
|
||||
// Required for mica effect
|
||||
internal enum AccentState
|
||||
{
|
||||
ACCENT_DISABLED = 0,
|
||||
ACCENT_ENABLE_GRADIENT = 1,
|
||||
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
|
||||
ACCENT_ENABLE_BLURBEHIND = 3,
|
||||
ACCENT_INVALID_STATE = 4
|
||||
}
|
||||
|
||||
internal enum WindowCompositionAttribute
|
||||
{
|
||||
WCA_ACCENT_POLICY = 19
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct AccentPolicy
|
||||
{
|
||||
public AccentState AccentState;
|
||||
public int AccentFlags;
|
||||
public int GradientColor;
|
||||
public int AnimationId;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct WindowCompositionAttributeData
|
||||
{
|
||||
public WindowCompositionAttribute Attribute;
|
||||
public IntPtr Data;
|
||||
public int SizeOfData;
|
||||
}
|
||||
|
||||
internal static class User32
|
||||
{
|
||||
[DllImport("user32.dll")]
|
||||
internal static extern int SetWindowCompositionAttribute(IntPtr hwnd, ref WindowCompositionAttributeData data);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
@ -1,17 +1,16 @@
|
||||
namespace FireWalletLite
|
||||
namespace FireWalletLite;
|
||||
|
||||
internal static class Program
|
||||
{
|
||||
internal static class Program
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
private static void Main()
|
||||
{
|
||||
/// <summary>
|
||||
/// The main entry point for the application.
|
||||
/// </summary>
|
||||
[STAThread]
|
||||
static void Main()
|
||||
{
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
// see https://aka.ms/applicationconfiguration.
|
||||
ApplicationConfiguration.Initialize();
|
||||
Application.Run(new Loader());
|
||||
}
|
||||
// To customize application configuration such as set high DPI settings or default font,
|
||||
// see https://aka.ms/applicationconfiguration.
|
||||
ApplicationConfiguration.Initialize();
|
||||
Application.Run(new Loader());
|
||||
}
|
||||
}
|
@ -1,42 +1,39 @@
|
||||
using QRCoder;
|
||||
|
||||
namespace FireWalletLite
|
||||
namespace FireWalletLite;
|
||||
|
||||
public partial class ReceiveForm : Form
|
||||
{
|
||||
public partial class ReceiveForm : Form
|
||||
private readonly string address;
|
||||
private MainForm main;
|
||||
|
||||
public ReceiveForm(string address, MainForm main)
|
||||
{
|
||||
string address;
|
||||
MainForm main;
|
||||
public ReceiveForm(string address, MainForm main)
|
||||
{
|
||||
InitializeComponent();
|
||||
this.address = address;
|
||||
this.main = main;
|
||||
// Theme form
|
||||
this.BackColor = ColorTranslator.FromHtml(main.Theme["background"]);
|
||||
this.ForeColor = ColorTranslator.FromHtml(main.Theme["foreground"]);
|
||||
foreach (Control control in Controls)
|
||||
{
|
||||
main.ThemeControl(control);
|
||||
}
|
||||
textBoxReceive.Text = address;
|
||||
textBoxReceive.Left = (this.ClientSize.Width - textBoxReceive.Width) / 2;
|
||||
label1.Left = (this.ClientSize.Width - label1.Width) / 2;
|
||||
buttonCopy.Left = (this.ClientSize.Width - buttonCopy.Width) / 2;
|
||||
InitializeComponent();
|
||||
this.address = address;
|
||||
this.main = main;
|
||||
// Theme form
|
||||
BackColor = ColorTranslator.FromHtml(main.Theme["background"]);
|
||||
ForeColor = ColorTranslator.FromHtml(main.Theme["foreground"]);
|
||||
foreach (Control control in Controls) main.ThemeControl(control);
|
||||
textBoxReceive.Text = address;
|
||||
textBoxReceive.Left = (ClientSize.Width - textBoxReceive.Width) / 2;
|
||||
label1.Left = (ClientSize.Width - label1.Width) / 2;
|
||||
buttonCopy.Left = (ClientSize.Width - buttonCopy.Width) / 2;
|
||||
|
||||
|
||||
var qrcode = new QRCodeGenerator();
|
||||
var qrData = qrcode.CreateQrCode(address, QRCodeGenerator.ECCLevel.Q);
|
||||
var qrCode = new QRCode(qrData);
|
||||
pictureBoxReceiveQR.Image = qrCode.GetGraphic(20, main.Theme["foreground"], main.Theme["background"]);
|
||||
pictureBoxReceiveQR.SizeMode = PictureBoxSizeMode.Zoom;
|
||||
pictureBoxReceiveQR.Width = ClientSize.Width / 2;
|
||||
pictureBoxReceiveQR.Height = ClientSize.Width / 2;
|
||||
pictureBoxReceiveQR.Left = (ClientSize.Width - pictureBoxReceiveQR.Width) / 2;
|
||||
}
|
||||
|
||||
QRCodeGenerator qrcode = new QRCodeGenerator();
|
||||
QRCodeData qrData = qrcode.CreateQrCode(address, QRCodeGenerator.ECCLevel.Q);
|
||||
QRCode qrCode = new QRCode(qrData);
|
||||
pictureBoxReceiveQR.Image = qrCode.GetGraphic(20, main.Theme["foreground"], main.Theme["background"]);
|
||||
pictureBoxReceiveQR.SizeMode = PictureBoxSizeMode.Zoom;
|
||||
pictureBoxReceiveQR.Width = this.ClientSize.Width / 2;
|
||||
pictureBoxReceiveQR.Height = this.ClientSize.Width / 2;
|
||||
pictureBoxReceiveQR.Left = (this.ClientSize.Width - pictureBoxReceiveQR.Width) / 2;
|
||||
}
|
||||
private void buttonCopy_Click(object sender, EventArgs e)
|
||||
{
|
||||
Clipboard.SetText(address);
|
||||
}
|
||||
private void buttonCopy_Click(object sender, EventArgs e)
|
||||
{
|
||||
Clipboard.SetText(address);
|
||||
}
|
||||
}
|
@ -1,106 +1,102 @@
|
||||
using FireWallet;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace FireWalletLite
|
||||
namespace FireWalletLite;
|
||||
|
||||
public partial class SendForm : Form
|
||||
{
|
||||
public partial class SendForm : Form
|
||||
private readonly int fee = 1;
|
||||
private readonly MainForm main;
|
||||
private readonly decimal unlockedbalance;
|
||||
|
||||
public SendForm(decimal Unlockedbalance, MainForm main)
|
||||
{
|
||||
int fee = 1;
|
||||
decimal unlockedbalance;
|
||||
MainForm main;
|
||||
public SendForm(decimal Unlockedbalance, MainForm main)
|
||||
InitializeComponent();
|
||||
this.main = main;
|
||||
unlockedbalance = Unlockedbalance;
|
||||
|
||||
// Theme form
|
||||
BackColor = ColorTranslator.FromHtml(main.Theme["background"]);
|
||||
ForeColor = ColorTranslator.FromHtml(main.Theme["foreground"]);
|
||||
foreach (Control control in Controls) main.ThemeControl(control);
|
||||
|
||||
labelMax.Text = "Max: " + (unlockedbalance - fee) + " HNS";
|
||||
if (unlockedbalance < fee) labelMax.Text = "Max: 0 HNS";
|
||||
//buttonSend.Enabled = false;
|
||||
// Allign controls
|
||||
labelAddress.Left = (ClientSize.Width - labelAddress.Width) / 2;
|
||||
labelAmount.Left = (ClientSize.Width - labelAmount.Width) / 2;
|
||||
textBoxAddress.Left = (ClientSize.Width - textBoxAddress.Width) / 2;
|
||||
labelMax.Left = (ClientSize.Width - labelMax.Width) / 2;
|
||||
textBoxAmount.Left = (ClientSize.Width - textBoxAmount.Width - labelHNSToken.Width - 10) / 2;
|
||||
labelHNSToken.Left = textBoxAmount.Left + textBoxAmount.Width + 10;
|
||||
buttonSend.Left = (ClientSize.Width - buttonSend.Width) / 2;
|
||||
}
|
||||
|
||||
private async void buttonSend_Click(object sender, EventArgs e)
|
||||
{
|
||||
buttonSend.Enabled = false;
|
||||
var address = textBoxAddress.Text;
|
||||
if (textBoxAddress.Text.Substring(0, 1) == "@")
|
||||
{
|
||||
InitializeComponent();
|
||||
this.main = main;
|
||||
this.unlockedbalance = Unlockedbalance;
|
||||
|
||||
// Theme form
|
||||
this.BackColor = ColorTranslator.FromHtml(main.Theme["background"]);
|
||||
this.ForeColor = ColorTranslator.FromHtml(main.Theme["foreground"]);
|
||||
foreach (Control control in Controls)
|
||||
{
|
||||
main.ThemeControl(control);
|
||||
}
|
||||
|
||||
labelMax.Text = "Max: " + (unlockedbalance - fee).ToString() + " HNS";
|
||||
if (unlockedbalance < fee)
|
||||
{
|
||||
labelMax.Text = "Max: 0 HNS";
|
||||
//buttonSend.Enabled = false;
|
||||
}
|
||||
|
||||
// Allign controls
|
||||
labelAddress.Left = (this.ClientSize.Width - labelAddress.Width) / 2;
|
||||
labelAmount.Left = (this.ClientSize.Width - labelAmount.Width) / 2;
|
||||
textBoxAddress.Left = (this.ClientSize.Width - textBoxAddress.Width) / 2;
|
||||
labelMax.Left = (this.ClientSize.Width - labelMax.Width) / 2;
|
||||
textBoxAmount.Left = (this.ClientSize.Width - textBoxAmount.Width - labelHNSToken.Width - 10) / 2;
|
||||
labelHNSToken.Left = textBoxAmount.Left + textBoxAmount.Width + 10;
|
||||
buttonSend.Left = (this.ClientSize.Width - buttonSend.Width) / 2;
|
||||
// HIP-02 not supported yet
|
||||
var notify = new NotifyForm("HIP-02 not supported yet");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
buttonSend.Enabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
private async void buttonSend_Click(object sender, EventArgs e)
|
||||
var valid = await main.ValidAddress(address);
|
||||
if (!valid)
|
||||
{
|
||||
buttonSend.Enabled = false;
|
||||
string address = textBoxAddress.Text;
|
||||
if (textBoxAddress.Text.Substring(0,1) == "@")
|
||||
{
|
||||
// HIP-02 not supported yet
|
||||
NotifyForm notify = new NotifyForm("HIP-02 not supported yet");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
buttonSend.Enabled = true;
|
||||
return;
|
||||
}
|
||||
bool valid = await main.ValidAddress(address);
|
||||
if (!valid)
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Invalid address");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
buttonSend.Enabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
decimal amount = 0;
|
||||
if (!decimal.TryParse(textBoxAmount.Text, out amount))
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Invalid amount");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
if (amount > unlockedbalance - fee)
|
||||
{
|
||||
NotifyForm notify = new NotifyForm("Insufficient balance");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
string content = "{\"method\": \"sendtoaddress\",\"params\": [ \"" + address + "\", " +
|
||||
amount.ToString() + "]}";
|
||||
string output = await main.APIPost("", true, content);
|
||||
JObject APIresp = JObject.Parse(output);
|
||||
if (APIresp["error"].ToString() != "")
|
||||
{
|
||||
main.AddLog("Failed:");
|
||||
main.AddLog(APIresp.ToString());
|
||||
JObject error = JObject.Parse(APIresp["error"].ToString());
|
||||
string ErrorMessage = error["message"].ToString();
|
||||
|
||||
NotifyForm notify = new NotifyForm("Error Transaction Failed\n" + ErrorMessage);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
string hash = APIresp["result"].ToString();
|
||||
string link = main.TXExplorer + hash;
|
||||
NotifyForm notifySuccess = new NotifyForm("Transaction Sent\nThis transaction could take up to 20 minutes to mine",
|
||||
"Explorer", link);
|
||||
notifySuccess.ShowDialog();
|
||||
notifySuccess.Dispose();
|
||||
this.Close();
|
||||
var notify = new NotifyForm("Invalid address");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
buttonSend.Enabled = true;
|
||||
return;
|
||||
}
|
||||
|
||||
decimal amount = 0;
|
||||
if (!decimal.TryParse(textBoxAmount.Text, out amount))
|
||||
{
|
||||
var notify = new NotifyForm("Invalid amount");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
if (amount > unlockedbalance - fee)
|
||||
{
|
||||
var notify = new NotifyForm("Insufficient balance");
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
var content = "{\"method\": \"sendtoaddress\",\"params\": [ \"" + address + "\", " +
|
||||
amount + "]}";
|
||||
var output = await main.APIPost("", true, content);
|
||||
var APIresp = JObject.Parse(output);
|
||||
if (APIresp["error"].ToString() != "")
|
||||
{
|
||||
main.AddLog("Failed:");
|
||||
main.AddLog(APIresp.ToString());
|
||||
var error = JObject.Parse(APIresp["error"].ToString());
|
||||
var ErrorMessage = error["message"].ToString();
|
||||
|
||||
var notify = new NotifyForm("Error Transaction Failed\n" + ErrorMessage);
|
||||
notify.ShowDialog();
|
||||
notify.Dispose();
|
||||
return;
|
||||
}
|
||||
|
||||
var hash = APIresp["result"].ToString();
|
||||
var link = main.TXExplorer + hash;
|
||||
var notifySuccess = new NotifyForm("Transaction Sent\nThis transaction could take up to 20 minutes to mine",
|
||||
"Explorer", link);
|
||||
notifySuccess.ShowDialog();
|
||||
notifySuccess.Dispose();
|
||||
Close();
|
||||
}
|
||||
}
|
@ -1,96 +1,104 @@
|
||||
using System.Diagnostics;
|
||||
using System.Drawing.Imaging;
|
||||
|
||||
namespace FireWallet;
|
||||
|
||||
namespace FireWallet
|
||||
public partial class SplashScreen : Form
|
||||
{
|
||||
public partial class SplashScreen : Form
|
||||
{
|
||||
public SplashScreen(bool timer)
|
||||
{
|
||||
InitializeComponent();
|
||||
close = false;
|
||||
IsClosed = false;
|
||||
}
|
||||
bool close;
|
||||
float opacity = 0.0f;
|
||||
private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (!close)
|
||||
{
|
||||
e.Cancel = true;
|
||||
}
|
||||
}
|
||||
public bool IsClosed { get; set; }
|
||||
public void CloseSplash()
|
||||
{
|
||||
close = true;
|
||||
private bool close;
|
||||
private float opacity;
|
||||
private Bitmap splash;
|
||||
|
||||
// Fade out
|
||||
timerIn.Stop();
|
||||
timerOut.Start();
|
||||
}
|
||||
private void label2_Click(object sender, EventArgs e)
|
||||
public SplashScreen(bool timer)
|
||||
{
|
||||
InitializeComponent();
|
||||
close = false;
|
||||
IsClosed = false;
|
||||
}
|
||||
|
||||
public bool IsClosed { get; set; }
|
||||
|
||||
private void SplashScreen_FormClosing(object sender, FormClosingEventArgs e)
|
||||
{
|
||||
if (!close) e.Cancel = true;
|
||||
}
|
||||
|
||||
public void CloseSplash()
|
||||
{
|
||||
close = true;
|
||||
|
||||
// Fade out
|
||||
timerIn.Stop();
|
||||
timerOut.Start();
|
||||
}
|
||||
|
||||
private void label2_Click(object sender, EventArgs e)
|
||||
{
|
||||
var psi = new ProcessStartInfo
|
||||
{
|
||||
ProcessStartInfo psi = new ProcessStartInfo
|
||||
FileName = "https://nathan.woodburn.au",
|
||||
UseShellExecute = true
|
||||
};
|
||||
Process.Start(psi);
|
||||
}
|
||||
|
||||
//new Bitmap(Properties.Resources.FWSplash);
|
||||
private void SplashScreen_Load(object sender, EventArgs e)
|
||||
{
|
||||
splash = pictureBoxNew.Image as Bitmap;
|
||||
pictureBoxNew.Visible = true;
|
||||
TransparencyKey = Color.FromArgb(0, 0, 0);
|
||||
pictureBoxNew.Invalidate();
|
||||
}
|
||||
|
||||
public Image SetImageOpacity(Image image, float opacity)
|
||||
{
|
||||
try
|
||||
{
|
||||
var bmp = new Bitmap(image.Width, image.Height);
|
||||
using (var gfx = Graphics.FromImage(bmp))
|
||||
{
|
||||
FileName = "https://nathan.woodburn.au",
|
||||
UseShellExecute = true
|
||||
};
|
||||
Process.Start(psi);
|
||||
}
|
||||
Bitmap splash;
|
||||
//new Bitmap(Properties.Resources.FWSplash);
|
||||
private void SplashScreen_Load(object sender, EventArgs e)
|
||||
{
|
||||
splash = pictureBoxNew.Image as Bitmap;
|
||||
pictureBoxNew.Visible = true;
|
||||
this.TransparencyKey = Color.FromArgb(0, 0, 0);
|
||||
pictureBoxNew.Invalidate();
|
||||
}
|
||||
public Image SetImageOpacity(Image image, float opacity)
|
||||
{
|
||||
try
|
||||
{
|
||||
Bitmap bmp = new Bitmap(image.Width, image.Height);
|
||||
using (Graphics gfx = Graphics.FromImage(bmp))
|
||||
{
|
||||
ColorMatrix matrix = new ColorMatrix();
|
||||
matrix.Matrix33 = opacity;
|
||||
ImageAttributes attributes = new ImageAttributes();
|
||||
attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
|
||||
gfx.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, attributes);
|
||||
}
|
||||
return bmp;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
var matrix = new ColorMatrix();
|
||||
matrix.Matrix33 = opacity;
|
||||
var attributes = new ImageAttributes();
|
||||
attributes.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
|
||||
gfx.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, image.Width, image.Height,
|
||||
GraphicsUnit.Pixel, attributes);
|
||||
}
|
||||
|
||||
return bmp;
|
||||
}
|
||||
private void timerIn_Tick(object sender, EventArgs e)
|
||||
catch
|
||||
{
|
||||
if (opacity >= 1)
|
||||
{
|
||||
timerIn.Stop();
|
||||
return;
|
||||
}
|
||||
opacity += 0.05f;
|
||||
pictureBoxNew.Image = SetImageOpacity(splash, opacity);
|
||||
pictureBoxNew.Invalidate();
|
||||
}
|
||||
private void timerOut_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (opacity <= 0)
|
||||
{
|
||||
timerOut.Stop();
|
||||
IsClosed = true;
|
||||
this.Close();
|
||||
return;
|
||||
}
|
||||
opacity -= 0.05f;
|
||||
pictureBoxNew.Image = SetImageOpacity(splash, opacity);
|
||||
pictureBoxNew.Invalidate();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void timerIn_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (opacity >= 1)
|
||||
{
|
||||
timerIn.Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
opacity += 0.05f;
|
||||
pictureBoxNew.Image = SetImageOpacity(splash, opacity);
|
||||
pictureBoxNew.Invalidate();
|
||||
}
|
||||
|
||||
private void timerOut_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (opacity <= 0)
|
||||
{
|
||||
timerOut.Stop();
|
||||
IsClosed = true;
|
||||
Close();
|
||||
return;
|
||||
}
|
||||
|
||||
opacity -= 0.05f;
|
||||
pictureBoxNew.Image = SetImageOpacity(splash, opacity);
|
||||
pictureBoxNew.Invalidate();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user