BMTuneSource/frmUploadBaserom.cs

583 lines
23 KiB
C#

using Data;
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Net;
using System.Reflection;
using System.Collections.Generic;
using System.Windows.Forms;
internal class frmUploadBaserom : Form
{
private Label label1;
public ProgressBar progressBar1;
private IContainer icontainer_0;
private Label label2;
private TextBox textBox1;
private TextBox textBox2;
private Label label3;
private TextBox textBox3;
private Label label4;
private Label label6;
private Panel panel1;
private Panel panel3;
private Button button1;
private TextBox textBox6;
private Label label5;
private ComboBox comboBox2;
private OpenFileDialog openFileDialog1;
private Class18 class18_0;
private string ErrorString = "";
private byte[] FileBytes = new byte[] { };
private string FilePath = "";
private string NewPath = "";
private string string_11_2 = "https://raw.githubusercontent.com/bouletmarc/BMTune_Server/master/";
private string IPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\BMTune\";
private Label label7;
private string FTPSite = "ftp://files.000webhost.com/All/bins/";
public frmUploadBaserom(ref Class18 class18_1)
{
this.InitializeComponent();
class18_0 = class18_1;
button1.Enabled = false;
this.comboBox2.SelectedIndex = 0;
if (!Directory.Exists(IPath)) Directory.CreateDirectory(IPath);
textBox6.Text = "";
label1.Text = "Select a File";
foreach (Control control in base.Controls)
{
float emSize = control.Font.Size * (class18_0.class10_settings_0.scaleRate / 100f);
control.Font = new Font(control.Font.Name, emSize, control.Font.Style, control.Font.Unit);
}
}
protected override void Dispose(bool disposing)
{
if (disposing && (this.icontainer_0 != null))
{
this.icontainer_0.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmUploadBaserom));
this.label1 = new System.Windows.Forms.Label();
this.progressBar1 = new System.Windows.Forms.ProgressBar();
this.label2 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
this.textBox2 = new System.Windows.Forms.TextBox();
this.label3 = new System.Windows.Forms.Label();
this.textBox3 = new System.Windows.Forms.TextBox();
this.label4 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.panel1 = new System.Windows.Forms.Panel();
this.textBox6 = new System.Windows.Forms.TextBox();
this.comboBox2 = new System.Windows.Forms.ComboBox();
this.label5 = new System.Windows.Forms.Label();
this.panel3 = new System.Windows.Forms.Panel();
this.button1 = new System.Windows.Forms.Button();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.label7 = new System.Windows.Forms.Label();
this.panel1.SuspendLayout();
this.panel3.SuspendLayout();
this.SuspendLayout();
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Top;
this.label1.Font = new System.Drawing.Font("Lucida Sans", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label1.Location = new System.Drawing.Point(10, 10);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(417, 22);
this.label1.TabIndex = 28;
this.label1.Text = "UPDATING !";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// progressBar1
//
this.progressBar1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.progressBar1.Location = new System.Drawing.Point(10, 221);
this.progressBar1.Name = "progressBar1";
this.progressBar1.Size = new System.Drawing.Size(417, 11);
this.progressBar1.TabIndex = 29;
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(6, 10);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(58, 14);
this.label2.TabIndex = 31;
this.label2.Text = "Filename:";
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(113, 7);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(292, 20);
this.textBox1.TabIndex = 32;
this.textBox1.Text = "DOUBLE CLIC TO SELECT YOUR FILE";
this.textBox1.DoubleClick += new System.EventHandler(this.textBox1_DoubleClick);
//
// textBox2
//
this.textBox2.Enabled = false;
this.textBox2.Location = new System.Drawing.Point(113, 29);
this.textBox2.Name = "textBox2";
this.textBox2.Size = new System.Drawing.Size(292, 20);
this.textBox2.TabIndex = 34;
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(6, 32);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(73, 14);
this.label3.TabIndex = 33;
this.label3.Text = "Description:";
//
// textBox3
//
this.textBox3.Enabled = false;
this.textBox3.Location = new System.Drawing.Point(113, 51);
this.textBox3.Name = "textBox3";
this.textBox3.Size = new System.Drawing.Size(164, 20);
this.textBox3.TabIndex = 36;
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(6, 54);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(46, 14);
this.label4.TabIndex = 35;
this.label4.Text = "Owner:";
//
// label6
//
this.label6.AutoSize = true;
this.label6.Location = new System.Drawing.Point(6, 76);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(78, 14);
this.label6.TabIndex = 38;
this.label6.Text = "Engine Serie:";
//
// panel1
//
this.panel1.Controls.Add(this.textBox6);
this.panel1.Controls.Add(this.comboBox2);
this.panel1.Controls.Add(this.label5);
this.panel1.Controls.Add(this.label2);
this.panel1.Controls.Add(this.textBox1);
this.panel1.Controls.Add(this.label6);
this.panel1.Controls.Add(this.label3);
this.panel1.Controls.Add(this.textBox2);
this.panel1.Controls.Add(this.textBox3);
this.panel1.Controls.Add(this.label4);
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(10, 32);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(417, 122);
this.panel1.TabIndex = 40;
//
// textBox6
//
this.textBox6.Location = new System.Drawing.Point(113, 97);
this.textBox6.Name = "textBox6";
this.textBox6.ReadOnly = true;
this.textBox6.Size = new System.Drawing.Size(41, 20);
this.textBox6.TabIndex = 41;
this.textBox6.Text = "1.00";
//
// comboBox2
//
this.comboBox2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox2.Enabled = false;
this.comboBox2.FormattingEnabled = true;
this.comboBox2.Items.AddRange(new object[] {
"Customs",
"Serie B",
"Serie D",
"Serie F",
"Serie H"});
this.comboBox2.Location = new System.Drawing.Point(113, 73);
this.comboBox2.Name = "comboBox2";
this.comboBox2.Size = new System.Drawing.Size(164, 22);
this.comboBox2.TabIndex = 38;
this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.comboBox2_SelectedIndexChanged);
//
// label5
//
this.label5.AutoSize = true;
this.label5.Location = new System.Drawing.Point(6, 100);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(100, 14);
this.label5.TabIndex = 40;
this.label5.Text = "Baserom Version:";
//
// panel3
//
this.panel3.Controls.Add(this.label7);
this.panel3.Controls.Add(this.button1);
this.panel3.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel3.Location = new System.Drawing.Point(10, 160);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(417, 61);
this.panel3.TabIndex = 42;
//
// button1
//
this.button1.Enabled = false;
this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.button1.Font = new System.Drawing.Font("Lucida Sans", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button1.ForeColor = System.Drawing.Color.Blue;
this.button1.Location = new System.Drawing.Point(150, 6);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(127, 28);
this.button1.TabIndex = 0;
this.button1.Text = "Upload File";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// openFileDialog1
//
this.openFileDialog1.DefaultExt = "*.bin";
this.openFileDialog1.Filter = "BMTune Binary|*.bin";
this.openFileDialog1.Title = "Open BMtune baserom (.bin)";
//
// label7
//
this.label7.AutoSize = true;
this.label7.Font = new System.Drawing.Font("Lucida Sans", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label7.ForeColor = System.Drawing.Color.Red;
this.label7.Location = new System.Drawing.Point(11, 44);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(394, 12);
this.label7.TabIndex = 1;
this.label7.Text = "** NO MORE AVAILABLE, FTP CONNECTION DISABLED SINCE V1.95 **";
//
// frmUploadBaserom
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(437, 242);
this.Controls.Add(this.panel3);
this.Controls.Add(this.panel1);
this.Controls.Add(this.progressBar1);
this.Controls.Add(this.label1);
this.Font = new System.Drawing.Font("Lucida Sans", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "frmUploadBaserom";
this.Padding = new System.Windows.Forms.Padding(10);
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Baserom Uploader";
this.Load += new System.EventHandler(this.frmAboutBox_Load);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.panel3.ResumeLayout(false);
this.panel3.PerformLayout();
this.ResumeLayout(false);
}
private void frmAboutBox_Load(object sender, EventArgs e)
{
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
/*this.progressBar1.Value = 5;
label1.Text = "Checking Errors";
string ThisError = "";
if (!textBox1.Text.Contains(".bin")) textBox1.Text += ".bin";
if (textBox1.Text == "") ThisError = "Empty Filename";
if (textBox1.Text.Length < 8) ThisError = "Filename too short";
if (textBox1.Text.Length > 40) ThisError = "Filename too long";
if (textBox1.Text.Contains("|")) ThisError = "Filename cannot contain char '|'";
if (textBox2.Text == "") ThisError = "Empty Description";
if (textBox2.Text.Length < 10) ThisError = "Description too short";
if (textBox2.Text.Length > 60) ThisError = "Description too long";
if (textBox2.Text.Contains("|")) ThisError = "Description cannot contain char '|'";
if (textBox3.Text == "") textBox3.Text = "ANONYMOUS";
if (textBox3.Text.Length < 5) ThisError = "Owner name too short";
if (textBox3.Text.Length > 20) ThisError = "Owner name too long";
if (textBox3.Text.Contains("|")) ThisError = "Owner cannot contain char '|'";
if (textBox1.Text.Length > 4 && textBox1.Text.Substring(textBox1.Text.Length - 4) != ".bin") textBox1.Text = textBox1.Text + ".bin";
this.progressBar1.Value = 10;
if (IsFileExistant()) ThisError = "File already exist online";
else if (label1.Text == "Not Connected") ThisError = "Not Connected to internet";
this.progressBar1.Value = 15;
if (ThisError != "")
{
MessageBox.Show(Form.ActiveForm, ThisError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
label1.Text = "Error Found";
}
else
{
label1.Text = "Uploading";
this.progressBar1.Value = 25;
string FTPList = "";
try
{
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("bmtune", "BNIKs7wx@EuPu$yqwXBa");
client.DownloadFile(FTPSite + "FTPList.txt", IPath + "FTPList.txt");
StreamReader reader = new StreamReader(IPath + "FTPList.txt");
FTPList = reader.ReadToEnd();
reader.Close();
reader.Dispose();
reader = null;
FileInfo info = new FileInfo(IPath + "FTPList.txt");
if (info.Exists) info.Delete();
info = null;
}
catch { }
this.progressBar1.Value = 50;
//Create .bin copy
NewPath = IPath + textBox1.Text;
File.Create(NewPath).Dispose();
File.WriteAllBytes(NewPath, File.ReadAllBytes(FilePath));
//Create description .txt infos
FTPList += textBox1.Text + "|" + textBox2.Text + "|" + textBox3.Text + "|" + comboBox2.Text + "|" + textBox6.Text + Environment.NewLine;
string DescPath = IPath + "FTPList.txt";
StreamWriter writer = new StreamWriter(DescPath, false);
writer.Write(FTPList);
writer.Close();
writer.Dispose();
writer = null;
//send files
SendFTP(NewPath);
this.progressBar1.Value = 75;
SendFTP(DescPath);
FileInfo info2 = new FileInfo(NewPath);
if (info2.Exists) info2.Delete();
info2 = null;
info2 = new FileInfo(DescPath);
if (info2.Exists) info2.Delete();
info2 = null;
if ( label1.Text == "Uploaded") MessageBox.Show(Form.ActiveForm, "File correctly sent!\nAllow some time to the server to upload it", "BMtune", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
this.progressBar1.Value = 0;*/
}
/*bool IsFileExistant()
{
bool ExistOnline = false;
try
{
label1.Text = "Checking Existence";
string TPath = IPath + "FilesList.txt";
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged += delegate (object sender, DownloadProgressChangedEventArgs e) { this.progressBar1.Value = e.ProgressPercentage; };
webClient.DownloadFileAsync(new Uri(string_11_2 + "FilesList.txt"), TPath);
while (webClient.IsBusy) { Application.DoEvents(); }
this.progressBar1.Value = 0;
label1.Text = "";
string[] AllText = File.ReadAllLines(IPath + "FilesList.txt");
if (AllText.Length > 0)
{
for (int i = 0; i < AllText.Length; i++)
{
if (AllText[i].Contains("|"))
{
string[] SplitCMD = AllText[i].Split('|');
if (SplitCMD[0] == textBox1.Text) ExistOnline = true;
}
}
}
}
catch
{
label1.Text = "Not Connected";
}
return ExistOnline;
}
void SendFTP(string FilepathT)
{
try
{
WebClient client = new WebClient();
client.Credentials = new NetworkCredential("bmtune", "BNIKs7wx@EuPu$yqwXBa");
client.UploadFile(FTPSite + Path.GetFileName(FilepathT), FilepathT);
label1.Text = "Uploaded";
}
catch
{
label1.Text = "Can't Upload";
}
}*/
private void CheckCompatibility(string ThisFilePath)
{
try
{
FileBytes = File.ReadAllBytes(ThisFilePath);
if (CanUploadFile())
{
label1.Text = "File Compatible";
FilePath = ThisFilePath;
textBox1.Text = Path.GetFileName(ThisFilePath);
textBox2.Enabled = true;
textBox3.Enabled = true;
comboBox2.Enabled = true;
//button1.Enabled = true;
}
else
{
label1.Text = "File Not Compatible";
textBox1.Text = "DOUBLE CLIC TO SELECT YOUR FILE";
textBox2.Enabled = false;
textBox3.Enabled = false;
comboBox2.Enabled = false;
button1.Enabled = false;
}
}
catch
{
label1.Text = "File Not Compatible";
textBox1.Text = "DOUBLE CLIC TO SELECT YOUR FILE";
textBox2.Enabled = false;
textBox3.Enabled = false;
comboBox2.Enabled = false;
button1.Enabled = false;
}
}
private void textBox1_DoubleClick(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK)
{
this.progressBar1.Value = 5;
CheckCompatibility(openFileDialog1.FileName);
this.progressBar1.Value = 0;
}
}
public bool CanUploadFile()
{
label1.Text = "Getting Compatibility";
bool CanUpload = false;
ErrorString = "";
if (FileBytes.Length < 32768)
{
ErrorString = "Incomplete baserom";
}
else {
if ((FileBytes[0x7ffaL] == 0x42) && (FileBytes[0x7ffbL] == 0x4d) && (FileBytes[0x7ffcL] == 0x54) && (FileBytes[0x7ffdL] == 0x75) && (FileBytes[0x7ffeL] == 0x6e) && (FileBytes[0x7fffL] == 0x65))
{
if (FileBytes[0x7ff1L] != 0xff)
{
string VStr = ((int)(FileBytes[0x7fefL])).ToString() + ((int)(FileBytes[0x7ff0L])).ToString() + ((int)(FileBytes[0x7ff1L])).ToString();
int RomVersion = int.Parse(VStr);
//unstable baserom
//this.class18_0.LoadBinaryFiles();
if (!this.class18_0.Binary_Files_0.IsStable(RomVersion - 100)) ErrorString = "Unstable baserom";
//this.class18_0.CloseBinaryFiles();
//Get Protection
bool Protected = false;
for (int i = 0; i < 32; i++) if (FileBytes[0x5ea6L + i] != 0xff) Protected = true;
if (Protected) ErrorString = "Protected baserom";
else
{
if (ErrorString == "")
{
textBox6.Text = "1.";
if (RomVersion - 100 < 10) textBox6.Text += "0";
textBox6.Text += (RomVersion - 100).ToString();
ErrorString = "Correct";
}
}
}
else
{
ErrorString = "Free baserom";
}
}
}
//Is Loaded ?
if (ErrorString != "Correct")
{
string ThisError = ErrorString;
if (ErrorString == "") ThisError = GetFileType();
MessageBox.Show(Form.ActiveForm, ThisError, "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
else
{
CanUpload = true;
}
return CanUpload;
}
private string GetFileType()
{
//0x0210 = 528 ... eCtune=196, P30=71, Gold=137, P72=228, Neptune=16, P28=212
//Get Other Softwares
string Error_Str = "";
if (FileBytes[528] == 0x2e && FileBytes[529] == 0xf9 && FileBytes[530] == 0x7d) Error_Str = "Crome P30 baserom";
else if (FileBytes[528] == 228 && FileBytes[529] == 0xf8 && FileBytes[530] == 0xa2) Error_Str = "Crome P72 baserom";
else if (FileBytes[528] == 212 && FileBytes[529] == 0x1a && FileBytes[530] == 0x02) Error_Str = "Crome P28 baserom";
else if (FileBytes[528] == 137 && FileBytes[529] == 0xc6 && FileBytes[530] == 0xab) Error_Str = "Crome Gold baserom";
else if (FileBytes[528] == 19) Error_Str = "Hondata S200 baserom";
else if (FileBytes[528] == 16 && FileBytes[529] == 0x8a && FileBytes[530] == 0xc4) Error_Str = "Neptune baserom";
if (FileBytes[0x7fef] == 0x65 && FileBytes[0x7ff0] == 43 && FileBytes[0x7ff1] == 0x74 && FileBytes[0x7ff2] == 0xA9) Error_Str = "eCtune baserom";
if (Error_Str == "") Error_Str = "Can't load the file!";
return Error_Str;
}
}