aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/FakeSetupScreen.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS.WinForms/FakeSetupScreen.cs')
-rw-r--r--ShiftOS.WinForms/FakeSetupScreen.cs206
1 files changed, 206 insertions, 0 deletions
diff --git a/ShiftOS.WinForms/FakeSetupScreen.cs b/ShiftOS.WinForms/FakeSetupScreen.cs
new file mode 100644
index 0000000..b223cb2
--- /dev/null
+++ b/ShiftOS.WinForms/FakeSetupScreen.cs
@@ -0,0 +1,206 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using ShiftOS.Engine;
+
+namespace ShiftOS.WinForms
+{
+ public partial class FakeSetupScreen : Form
+ {
+ private Oobe oobe = null;
+
+ public Action<bool> MUDUserFound = null;
+
+ public FakeSetupScreen(Oobe _oobe)
+ {
+ oobe = _oobe;
+ InitializeComponent();
+ SetupUI();
+ ServerManager.MessageReceived += (msg) =>
+ {
+ if (msg.Name == "mud_notfound")
+ this.Invoke(new Action(() => { MUDUserFound?.Invoke(false); }));
+ else if (msg.Name == "mud_found")
+ this.Invoke(new Action(() => { MUDUserFound?.Invoke(true); }));
+ };
+ }
+
+ public event Action<string> TextSent;
+ bool isTyping = false;
+
+ private int currentPage = 0;
+
+ public void SetupUI()
+ {
+ btnback.Show();
+ pnlheader.Dock = DockStyle.Top;
+ pnlheader.Height = 50;
+ switch (currentPage)
+ {
+ case 0:
+ page1.BringToFront();
+ pnlheader.Dock = DockStyle.Left;
+ pnlheader.Width = 100;
+ btnback.Hide();
+ break;
+ case 1:
+ btnnext.Hide();
+ btnback.Hide();
+ page2.BringToFront();
+ pgformatprogress.Value = 0;
+ var dinf = new System.IO.DriveInfo("C:");
+ StartWipingInBackground(((dinf.TotalSize / 1024) / 1024) / 1024);
+ TextType($@"So I see you're progressing through.
+I really hope you aren't one of those newbies who just next-next-next-finish their way through these things.
+I see you've named your drive " + dinf.VolumeLabel + $@"
+And it can contain up to {dinf.TotalSize} bytes of information.
+And you've formatted this drive with a partition of type " + dinf.DriveFormat + $@".
+Interesting...
+Very interesting...");
+ break;
+ case 2:
+ btnnext.Show();
+ btnback.Hide();
+ TextType(@"Now it's all gone. Now I need some user input so I can install ShiftOS.
+Firstly, please enter a username, password, and system name.
+Make the username and system name unique so I can identify exactly who you are. You're not the only one here.
+Also, make sure the password is secure... There have been people known to breach users' accounts in ShiftOS and steal their stuff.
+So make sure your password is secure enough that it can't be guessed, but easy for you to remember, and don't put any personal information in your account.");
+ page3.BringToFront();
+ break;
+ case 3:
+ if (string.IsNullOrEmpty(txtnewusername.Text))
+ {
+ TextType("You must specify a valid username!");
+ currentPage--;
+ SetupUI();
+ break;
+ }
+
+ if (string.IsNullOrEmpty(txtnewpassword.Text))
+ {
+ TextType("A password would seriously be recommended.");
+ currentPage--;
+ SetupUI();
+ break;
+ }
+
+ if (string.IsNullOrEmpty(txtnewsysname.Text))
+ {
+ TextType("You must name your computer.");
+ currentPage--;
+ SetupUI();
+ break;
+ }
+
+
+ MUDUserFound = (val) =>
+ {
+ if(val == true)
+ {
+ TextType("I have just verified that your username and password already exists on my end. Please choose another.");
+ currentPage--;
+ SetupUI();
+
+ }
+ else
+ {
+ TextType("I am going to keep that info on my checklist for installing ShiftOS on your system. Now, onto some legal stuff. I highly suggest you read this.");
+ currentPage++;
+ oobe.MySave.Username = txtnewusername.Text;
+ oobe.MySave.Password = txtnewpassword.Text;
+ oobe.MySave.SystemName = txtnewsysname.Text;
+ SetupUI();
+ }
+ };
+ ServerManager.SendMessage("mud_checkuserexists", $@"{{
+ username: ""{txtnewusername.Text}"",
+ password: ""{txtnewpassword.Text}""
+}}");
+ break;
+ case 4:
+ page4.BringToFront();
+ txtlicenseagreement.Rtf = Properties.Resources.ShiftOS;
+ break;
+ case 5:
+ CanClose = true;
+ this.Close();
+ break;
+ }
+ }
+
+ public void StartWipingInBackground(long arbitraryAmountOfBytes)
+ {
+ pgformatprogress.Maximum = (int)arbitraryAmountOfBytes;
+ var t = new Thread(() =>
+ {
+ for(long i = 0; i <= arbitraryAmountOfBytes; i++)
+ {
+ Thread.Sleep(250);
+ this.Invoke(new Action(() =>
+ {
+ pgformatprogress.Value = (int)i;
+ lbbyteszeroed.Text = $"Gigabytes zeroed: {i}/{arbitraryAmountOfBytes}";
+ }));
+ }
+ this.Invoke(new Action(() =>
+ {
+ currentPage++;
+ SetupUI();
+ }));
+ });
+ t.IsBackground = true;
+ t.Start();
+ }
+
+
+
+ private void TextType(string text)
+ {
+ new Thread(() =>
+ {
+ while(isTyping == true)
+ {
+
+ }
+ isTyping = true;
+ TextSent?.Invoke(text);
+ isTyping = false;
+ }).Start();
+ }
+
+ bool CanClose = false;
+
+ private void FakeSetupScreen_FormClosing(object sender, FormClosingEventArgs e)
+ {
+ if (CanClose)
+ {
+
+ }
+ else
+ {
+ e.Cancel = true;
+ TextType("Don't try to close the dialog. It's a futile attempt.");
+ }
+ }
+
+ private void btnback_Click(object sender, EventArgs e)
+ {
+ currentPage--;
+ SetupUI();
+ }
+
+ private void btnnext_Click(object sender, EventArgs e)
+ {
+ currentPage++;
+ SetupUI();
+ }
+ }
+}