first commit
This commit is contained in:
272
GoldenEye/Updater/Updater.cs
Normal file
272
GoldenEye/Updater/Updater.cs
Normal file
@@ -0,0 +1,272 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.IO;
|
||||
using GlobalScope;
|
||||
|
||||
|
||||
|
||||
namespace UpdateVS
|
||||
{
|
||||
public partial class Updater : Form
|
||||
{
|
||||
private List<String> _Messages = new List<string>();
|
||||
private Boolean LegalUpdate = true;
|
||||
public String FileNameExceptionContent
|
||||
{
|
||||
get
|
||||
{
|
||||
// Returns part of exec name to scan for and ignore in deleting and copying
|
||||
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
|
||||
string exe = System.IO.Path.GetFullPath(ass.Location);
|
||||
string name = new FileInfo(exe).Name;
|
||||
string ext = new FileInfo(exe).Extension;
|
||||
name = name.Replace( ext, "");
|
||||
return name.ToLower();
|
||||
}
|
||||
}
|
||||
private String _FileFromCommandLine = "";
|
||||
|
||||
public Updater(string[] args)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
if (args.Length != 2)
|
||||
LegalUpdate = false;
|
||||
else
|
||||
{
|
||||
if (!args[1].StartsWith(Globals.LegalUpdateKeyWord))
|
||||
{
|
||||
LegalUpdate = false;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
_FileFromCommandLine = Globals.SpaceIn(args[1].Substring(Globals.LegalUpdateKeyWord.Length));
|
||||
LegalUpdate = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Build version
|
||||
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
|
||||
string exe = System.IO.Path.GetFullPath(ass.Location);
|
||||
DateTime d = new System.IO.FileInfo(exe).LastWriteTimeUtc;
|
||||
this.Text = String.Format(Globals.UpdaterModuleDescription + " (v{0:0000}{1:00}{2:00})", d.Year, d.Month, d.Day);
|
||||
}
|
||||
|
||||
private void Updater_Load(object sender, EventArgs e)
|
||||
{
|
||||
this.Text = Globals.UpdaterModuleDescription;
|
||||
|
||||
|
||||
// Center screen
|
||||
this.Location = new Point((int)Math.Round((Screen.PrimaryScreen.Bounds.Width - this.Size.Width) / 2.0), (int)Math.Round((Screen.PrimaryScreen.Bounds.Height - this.Size.Height) / 2.0));
|
||||
|
||||
|
||||
|
||||
lbox.Items.Clear();
|
||||
|
||||
System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
|
||||
string exe = System.IO.Path.GetFullPath(ass.Location);
|
||||
if (exe.ToLower().Contains("silicium"))
|
||||
{
|
||||
MessageBox.Show("You can only run '" + Globals.UpdaterModuleDescription + "' locally!", Globals.UpdaterModuleDescription, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
Application.Exit();
|
||||
}
|
||||
_Messages.Add("Updating...");
|
||||
_Messages.Add("");
|
||||
_Messages.Add("Server copy is on " + Globals.PathToServerVersion);
|
||||
_Messages.Add("");
|
||||
|
||||
UpdateMessages();
|
||||
|
||||
startupTimer.Start();
|
||||
}
|
||||
|
||||
private void startupTimer_Tick(object sender, EventArgs e)
|
||||
{
|
||||
// Prevent from occuring again
|
||||
startupTimer.Stop();
|
||||
|
||||
// Check if the update is started legally
|
||||
if (!LegalUpdate)
|
||||
{
|
||||
_Messages.Clear();
|
||||
_Messages.Add(Globals.UpdaterModuleDescription + " was not called by " + Globals.SoftwareDescription + "!");
|
||||
UpdateMessages();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Add commandline argument to messageboard
|
||||
if (_FileFromCommandLine.Length > 2)
|
||||
_Messages.Add("Command line argument: " + _FileFromCommandLine);
|
||||
|
||||
|
||||
|
||||
// Get local directory
|
||||
string LocalDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location) + "\\";
|
||||
|
||||
|
||||
// Make fileLists
|
||||
string[] localFileList = Directory.GetFiles(LocalDir);
|
||||
|
||||
_Messages.Add(String.Format("{0} files found in local folder", localFileList.Length));
|
||||
UpdateMessages();
|
||||
|
||||
string[] serverFileList;
|
||||
if (Directory.Exists(Globals.PathToServerVersion))
|
||||
{
|
||||
serverFileList = Directory.GetFiles(Globals.PathToServerVersion);
|
||||
|
||||
_Messages.Add(String.Format("{0} files found on server", localFileList.Length));
|
||||
UpdateMessages();
|
||||
}
|
||||
else
|
||||
{
|
||||
_Messages.Add("Serverpath not accessible!");
|
||||
UpdateMessages();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Boolean ErrorEncountered = false;
|
||||
|
||||
|
||||
#region Deleting old files
|
||||
|
||||
List<string> serverFileNames = new List<string>();
|
||||
foreach (string s in serverFileList)
|
||||
serverFileNames.Add(new FileInfo(s).Name);
|
||||
|
||||
// Delete old files
|
||||
foreach (string f in localFileList)
|
||||
{
|
||||
|
||||
|
||||
|
||||
|
||||
if (f.ToLower().IndexOf(FileNameExceptionContent) < 0)
|
||||
{
|
||||
FileInfo fInfo = new FileInfo(f);
|
||||
if (serverFileNames.Contains(fInfo.Name))
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
else
|
||||
{
|
||||
try
|
||||
{
|
||||
_Messages.Add(String.Format("Removing : {0}\n", f));
|
||||
UpdateMessages();
|
||||
fInfo.Delete();
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
_Messages.Add(String.Format("Failed to remove : {0}", f));
|
||||
_Messages.Add(String.Format(" [{0}]", ex.Message));
|
||||
UpdateMessages();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
#endregion Deleting old files
|
||||
|
||||
|
||||
|
||||
#region Copy to local
|
||||
foreach (string serverFilePath in serverFileList)
|
||||
{
|
||||
if (serverFilePath.ToLower().IndexOf(FileNameExceptionContent) < 0)
|
||||
{
|
||||
string targetFilePath = "";
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
string name = new FileInfo(serverFilePath).Name;
|
||||
|
||||
targetFilePath = LocalDir + name;
|
||||
|
||||
// Only copy if newer or does not exist
|
||||
if (File.Exists(targetFilePath))
|
||||
{
|
||||
FileInfo target = new FileInfo(targetFilePath);
|
||||
FileInfo source = new FileInfo(serverFilePath);
|
||||
|
||||
if (source.LastWriteTimeUtc > target.LastWriteTimeUtc)
|
||||
{
|
||||
File.Copy(serverFilePath, targetFilePath, true);
|
||||
_Messages.Add(String.Format("Updating : {0}\n", targetFilePath));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
File.Copy(serverFilePath, targetFilePath, true);
|
||||
_Messages.Add(String.Format("Copying : {0}\n", targetFilePath));
|
||||
}
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
ErrorEncountered = true;
|
||||
_Messages.Add(String.Format("Failed to copy : {0}", targetFilePath));
|
||||
_Messages.Add(String.Format(" [{0}]", ex.Message));
|
||||
}
|
||||
UpdateMessages();
|
||||
}
|
||||
}
|
||||
#endregion Copy to local
|
||||
|
||||
|
||||
Globals.RegisterUser(Globals.UpdaterModuleDescription + " (v" + Globals.BuildVersion + ")");
|
||||
|
||||
_Messages.Add("User register updated");
|
||||
UpdateMessages();
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
if (!ErrorEncountered)
|
||||
{
|
||||
String argument = Globals.CalledByUpdaterKeyWord + Globals.SpaceOut(_FileFromCommandLine);
|
||||
System.Diagnostics.Process.Start(LocalDir + Globals.FileNameOfSoftware, argument);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ErrorEncountered = true;
|
||||
_Messages.Add(String.Format("Failed to launch {0}", Globals.FileNameOfSoftware));
|
||||
_Messages.Add(String.Format(" [{0}]", ex.Message));
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(!ErrorEncountered)
|
||||
Application.Exit();
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateMessages()
|
||||
{
|
||||
int stop = _Messages.Count - 1;
|
||||
int start = (int)Math.Max(stop - 19, 0);
|
||||
|
||||
lbox.Items.Clear();
|
||||
|
||||
for (int i = start; i <= stop; i++)
|
||||
lbox.Items.Add(_Messages[i]);
|
||||
|
||||
lbox.Refresh();
|
||||
lbox.ClearSelected();
|
||||
this.Refresh();
|
||||
System.Threading.Thread.Sleep(50);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user