private void StartPatcher() { bgThread = new Thread(() => { LogTextBox("Starting Patcher"); WebClient client = new WebClient(); #region Configure download bar client.DownloadProgressChanged += (o, e) => { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { double bytesIn = double.Parse(e.BytesReceived.ToString()); double totalBytes = double.Parse(e.TotalBytesToReceive.ToString()); double percentage = bytesIn / totalBytes * 100; CurrentProgressLabel.Content = "Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive; CurrentProgressBar.Value = int.Parse(Math.Truncate(percentage).ToString()); })); }; #endregion #region Update this client string CurrentMD5 = GetMd5(); LogTextBox("MD5: " + CurrentMD5); string VersionString = ""; try { VersionString = client.DownloadString(new Uri("http://legendaryclient.com/update.html")); } catch { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Could not retrieve update files!"; Client.Log("Couldn't get update files for LegendaryClient"); })); return; } string[] VersionSplit = VersionString.Split('|'); LogTextBox("Update data: " + VersionSplit[0] + "|" + VersionSplit[1]); Client.Log("Update data: " + VersionSplit[0] + "|" + VersionSplit[1]); #if !DEBUG //Dont patch client while in DEBUG if (VersionSplit.Length == 3) { string[] versionArray = VersionString.Split('|'); if (VersionSplit[0] != CurrentMD5) { LogTextBox("LegendaryClient needs to be updated"); /*Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => * { * CurrentStatusLabel.Content = "Downloading latest LegendaryClient..."; * })); * * client.DownloadFile(versionArray[2], "COL.ZIP"); * Directory.CreateDirectory("Patch"); * System.IO.Compression.ZipFile.ExtractToDirectory("COL.ZIP", "Patch"); * File.Delete("COL.ZIP"); * System.Diagnostics.Process.Start("Patcher.exe"); * Environment.Exit(0);*/ } } #endif LogTextBox("LegendaryClient is up to date"); Client.Log("LC Patched"); #endregion LegendaryClient #region ProgressBar 20% Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "20%"; TotalProgessBar.Value = 20; })); #endregion #region Get DDragon data System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); if (!Directory.Exists("Assets")) { Directory.CreateDirectory("Assets"); } if (!File.Exists(Path.Combine("Assets", "VERSION_DDRagon"))) { var VersionLOL = File.Create(Path.Combine("Assets", "VERSION_DDRagon")); VersionLOL.Write(encoding.GetBytes("0.0.0"), 0, encoding.GetBytes("0.0.0").Length); VersionLOL.Close(); } RiotPatcher patcher = new RiotPatcher(); string DDragonDownloadURL = patcher.GetDragon(); if (!DDragonDownloadURL.StartsWith("http:")) { DDragonDownloadURL = "http:" + DDragonDownloadURL; } LogTextBox("DataDragon Version: " + patcher.DDragonVersion); string DDragonVersion = File.ReadAllText(Path.Combine(Client.ExecutingDirectory, "Assets", "VERSION_DDragon")); LogTextBox("Current DataDragon Version: " + DDragonVersion); Client.Log("DD: " + patcher.DDragonVersion + "|" + DDragonVersion); if (patcher.DDragonVersion != DDragonVersion) { if (!Directory.Exists(Path.Combine("Assets", "temp"))) { Directory.CreateDirectory(Path.Combine("Assets", "temp")); } Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Downloading DataDragon"; })); client.DownloadFile(DDragonDownloadURL, Path.Combine("Assets", "dragontail-" + patcher.DDragonVersion + ".tgz")); Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Extracting DataDragon"; })); Stream inStream = File.OpenRead(Path.Combine("Assets", "dragontail-" + patcher.DDragonVersion + ".tgz")); using (GZipInputStream gzipStream = new GZipInputStream(inStream)) { TarArchive tarArchive = TarArchive.CreateInputTarArchive(gzipStream); tarArchive.ExtractContents(Path.Combine("Assets", "temp")); tarArchive.CloseArchive(); } inStream.Close(); Copy(Path.Combine("Assets", "temp", patcher.DDragonVersion, "data"), Path.Combine("Assets", "data")); Copy(Path.Combine("Assets", "temp", patcher.DDragonVersion, "img"), Path.Combine("Assets")); Directory.Delete(Path.Combine("Assets", "temp"), true); var VersionDDragon = File.Create(Path.Combine("Assets", "VERSION_DDRagon")); VersionDDragon.Write(encoding.GetBytes(patcher.DDragonVersion), 0, encoding.GetBytes(patcher.DDragonVersion).Length); VersionDDragon.Close(); } #endregion DDragon #region ProgressBar 50% Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "50%"; TotalProgessBar.Value = 50; })); #endregion #region Update lol_air_client if (!File.Exists(Path.Combine("Assets", "VERSION_AIR"))) { var VersionAIR = File.Create(Path.Combine("Assets", "VERSION_AIR")); VersionAIR.Write(encoding.GetBytes("0.0.0.0"), 0, encoding.GetBytes("0.0.0.0").Length); VersionAIR.Close(); } string LatestAIR = patcher.GetLatestAir(); LogTextBox("Air Assets Version: " + LatestAIR); string AirVersion = File.ReadAllText(Path.Combine(Client.ExecutingDirectory, "Assets", "VERSION_AIR")); LogTextBox("Current Air Assets Version: " + AirVersion); bool RetrieveCurrentInstallation = false; string AirLocation = ""; Client.Log("AIR: " + LatestAIR + "|" + AirVersion); if (AirVersion == "0.0.0.0") { LogTextBox("Checking for existing League of Legends Installation"); AirLocation = Path.Combine("League of Legends", "RADS", "projects", "lol_air_client", "releases"); if (Directory.Exists(AirLocation)) { RetrieveCurrentInstallation = true; } else if (Directory.Exists(Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", AirLocation))) { RetrieveCurrentInstallation = true; AirLocation = Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", AirLocation); } else { LogTextBox("Unable to find existing League of Legends. Copy your League of Legends folder into + " + Client.ExecutingDirectory + " to make the patching process quicker"); } if (RetrieveCurrentInstallation) { Client.Log("Got previous installation: " + AirLocation); LogTextBox("Getting Air Assets from " + AirLocation); Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Copying Air Assets"; })); AirVersion = patcher.GetCurrentAirInstall(AirLocation); LogTextBox("Retrieved currently installed Air Assets"); LogTextBox("Current Air Assets Version: " + AirVersion); } } if (AirVersion != LatestAIR) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Retrieving Air Assets"; })); AirLocation = Path.Combine("League of Legends", "RADS", "projects", "lol_air_client", "releases"); if (Directory.Exists(AirLocation)) { AirVersion = patcher.GetCurrentAirInstall(AirLocation); LogTextBox("Retrieved currently installed Air Assets"); LogTextBox("Current Air Assets Version: " + AirVersion); } } #endregion lol_air_client #region ProgressBar 70% Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "70%"; TotalProgessBar.Value = 70; })); #endregion #region Update lol_game_client if (!Directory.Exists("RADS")) { Directory.CreateDirectory("RADS"); } if (!File.Exists(Path.Combine("RADS", "VERSION_LOL"))) { var VersionGAME = File.Create(Path.Combine("RADS", "VERSION_LOL")); VersionGAME.Write(encoding.GetBytes("0.0.0.0"), 0, encoding.GetBytes("0.0.0.0").Length); VersionGAME.Close(); } string LatestGame = patcher.GetLatestGame(); LogTextBox("League of Legends Version: " + LatestGame); string GameVersion = File.ReadAllText(Path.Combine(Client.ExecutingDirectory, "RADS", "VERSION_LOL")); LogTextBox("Current League of Legends Version: " + GameVersion); RetrieveCurrentInstallation = false; string GameLocation = ""; if (GameVersion == "0.0.0.0") { LogTextBox("Checking for existing League of Legends Installation"); GameLocation = Path.Combine("League of Legends", "RADS"); if (Directory.Exists(GameLocation)) { RetrieveCurrentInstallation = true; } else if (Directory.Exists(Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", GameLocation))) { RetrieveCurrentInstallation = true; GameLocation = Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", GameLocation); } else { LogTextBox("Unable to find existing League of Legends. Copy your League of Legends folder into + " + Client.ExecutingDirectory + " to make the patching process quicker"); } if (RetrieveCurrentInstallation) { LogTextBox("Getting League Of Legends from " + GameLocation); Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Copying League of Legends"; })); GameVersion = patcher.GetCurrentGameInstall(GameLocation); LogTextBox("Retrieved currently installed League of Legends"); LogTextBox("Current League of Legends Version: " + GameVersion); } } if (GameVersion != LatestGame) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Retrieving League of Legends"; })); GameLocation = Path.Combine("League of Legends", "RADS"); if (Directory.Exists(GameLocation)) { GameVersion = patcher.GetCurrentGameInstall(GameLocation); LogTextBox("Retrieved currently installed League of Legends"); LogTextBox("Current League of Legends Version: " + GameVersion); } } #endregion lol_game_client #region ProgressBar 90% Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "90%"; TotalProgessBar.Value = 90; })); #endregion FinishPatching(); }); bgThread.IsBackground = true; bgThread.Start(); }
private void StartPatcher() { Thread bgThead = new Thread(() => { LogTextBox("Starting Patcher"); WebClient client = new WebClient(); client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged); client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadDDragon); client.DownloadProgressChanged += (o, e) => { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { double bytesIn = double.Parse(e.BytesReceived.ToString()); double totalBytes = double.Parse(e.TotalBytesToReceive.ToString()); double percentage = bytesIn / totalBytes * 100; CurrentProgressLabel.Content = "Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive; CurrentProgressBar.Value = int.Parse(Math.Truncate(percentage).ToString()); })); }; #region LegendaryClient string CurrentMD5 = GetMd5(); LogTextBox("MD5: " + CurrentMD5); UpdateData legendaryupdatedata = new UpdateData(); var version = LegendaryClientPatcher.GetLatestLCVersion(); LogTextBox("Most Up to date LegendaryClient Version: " + version); string versionAsString = version; if (version != Client.LegendaryClientVersion) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { MessageOverlay overlay = new MessageOverlay(); overlay.MessageTextBox.Text = "An update is available LegendaryClient"; overlay.MessageTitle.Content = "Update Notification"; overlay.AcceptButton.Content = "Update LegendaryClient"; overlay.AcceptButton.Click += update; overlay.MessageTextBox.TextChanged += Text_Changed; Client.OverlayContainer.Content = overlay.Content; //Client.OverlayContainer.Visibility = Visibility.Visible; CurrentProgressLabel.Content = "LegendaryClient Is Out of Date!"; })); LogTextBox("LegendaryClient Is Out of Date!"); //return; } else if (Client.LegendaryClientVersion == version) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "LegendaryClient Is Up To Date!"; })); LogTextBox("LegendaryClient Is Up To Date!"); } else if (version == null) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Could not check LegendaryClient Version!"; })); LogTextBox("Could not check LegendaryClient Version!"); return; } #endregion LegendaryClient Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "20%"; TotalProgessBar.Value = 20; })); #region DDragon System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); if (!Directory.Exists("Assets")) { Directory.CreateDirectory("Assets"); } if (!File.Exists(Path.Combine("Assets", "VERSION_DDRagon"))) { var VersionLOL = File.Create(Path.Combine("Assets", "VERSION_DDRagon")); VersionLOL.Write(encoding.GetBytes("0.0.0"), 0, encoding.GetBytes("0.0.0").Length); VersionLOL.Close(); } RiotPatcher patcher = new RiotPatcher(); string DDragonDownloadURL = patcher.GetDragon(); LogTextBox("DataDragon Version: " + patcher.DDragonVersion); string DDragonVersion = File.ReadAllText(Path.Combine(Client.ExecutingDirectory, "Assets", "VERSION_DDragon")); LogTextBox("Current DataDragon Version: " + DDragonVersion); Client.Version = DDragonVersion; Client.Log("DDragon Version (LOL Version) = " + DDragonVersion); LogTextBox("Client Version: " + Client.Version); if (patcher.DDragonVersion != DDragonVersion) { if (!Directory.Exists(Path.Combine("Assets", "temp"))) { Directory.CreateDirectory(Path.Combine("Assets", "temp")); } Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Downloading DataDragon"; })); client.DownloadFile(DDragonDownloadURL, Path.Combine("Assets", "dragontail-" + patcher.DDragonVersion + ".tgz")); Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Extracting DataDragon"; })); Stream inStream = File.OpenRead(Path.Combine("Assets", "dragontail-" + patcher.DDragonVersion + ".tgz")); using (GZipInputStream gzipStream = new GZipInputStream(inStream)) { TarArchive tarArchive = TarArchive.CreateInputTarArchive(gzipStream); tarArchive.ExtractContents(Path.Combine("Assets", "temp")); tarArchive.CloseArchive(); } inStream.Close(); Copy(Path.Combine("Assets", "temp", patcher.DDragonVersion, "data"), Path.Combine("Assets", "data")); Copy(Path.Combine("Assets", "temp", patcher.DDragonVersion, "img"), Path.Combine("Assets")); DeleteDirectoryRecursive(Path.Combine("Assets", "temp")); var VersionDDragon = File.Create(Path.Combine("Assets", "VERSION_DDRagon")); VersionDDragon.Write(encoding.GetBytes(patcher.DDragonVersion), 0, encoding.GetBytes(patcher.DDragonVersion).Length); Client.Version = DDragonVersion; VersionDDragon.Close(); } #endregion DDragon Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "40%"; TotalProgessBar.Value = 40; })); // Try get LoL path from registry //A string that looks like C:\Riot Games\League of Legends\ string lolRootPath = GetLolRootPath(); #region lol_air_client if (!File.Exists(Path.Combine("Assets", "VERSION_AIR"))) { var VersionAIR = File.Create(Path.Combine("Assets", "VERSION_AIR")); VersionAIR.Write(encoding.GetBytes("0.0.0.0"), 0, encoding.GetBytes("0.0.0.0").Length); VersionAIR.Close(); } string LatestAIR = patcher.GetLatestAir(); LogTextBox("Air Assets Version: " + LatestAIR); string AirVersion = File.ReadAllText(Path.Combine(Client.ExecutingDirectory, "Assets", "VERSION_AIR")); LogTextBox("Current Air Assets Version: " + AirVersion); bool RetrieveCurrentInstallation = false; WebClient UpdateClient = new WebClient(); string Release = UpdateClient.DownloadString("http://l3cdn.riotgames.com/releases/live/projects/lol_air_client/releases/releaselisting"); string LatestVersion = Release.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)[0]; if (AirVersion != LatestVersion) { //Download Air Assists from riot string Package = UpdateClient.DownloadString("http://l3cdn.riotgames.com/releases/live/projects/lol_air_client/releases/" + LatestVersion + "/packages/files/packagemanifest"); GetAllPngs(Package); if (File.Exists(Path.Combine(Client.ExecutingDirectory, "gameStats_en_US.sqlite"))) { File.Delete(Path.Combine(Client.ExecutingDirectory, "gameStats_en_US.sqlite")); } UpdateClient.DownloadFile(new Uri("http://l3cdn.riotgames.com/releases/live/projects/lol_air_client/releases/" + LatestVersion + "/files/assets/data/gameStats/gameStats_en_US.sqlite"), Path.Combine(Client.ExecutingDirectory, "gameStats_en_US.sqlite")); if (File.Exists(System.IO.Path.Combine(Client.ExecutingDirectory, "Assets", "VERSION_AIR"))) { File.Delete(System.IO.Path.Combine(Client.ExecutingDirectory, "Assets", "VERSION_AIR")); } var file = File.Create(System.IO.Path.Combine(Client.ExecutingDirectory, "Assets", "VERSION_AIR")); file.Write(encoding.GetBytes(LatestVersion), 0, encoding.GetBytes(LatestVersion).Length); file.Close(); } if (AirVersion != LatestAIR) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { SkipPatchButton.IsEnabled = true; CurrentProgressLabel.Content = "Retrieving Air Assets"; })); } #endregion lol_air_client //string GameVersion = File.ReadAllText(Path.Combine(Client.ExecutingDirectory, "RADS", "VERSION_LOL")); #region lol_game_client LogTextBox("Trying to detect League of Legends GameClient"); LogTextBox("League of Legends is located at: " + lolRootPath); //RADS\solutions\lol_game_client_sln\releases var GameLocation = Path.Combine(lolRootPath, "RADS", "solutions", "lol_game_client_sln", "releases"); string LolVersion2 = new WebClient().DownloadString("http://l3cdn.riotgames.com/releases/live/projects/lol_game_client/releases/releaselisting_NA"); string LolVersion = new WebClient().DownloadString("http://l3cdn.riotgames.com/releases/live/solutions/lol_game_client_sln/releases/releaselisting_NA"); string GameClientSln = LolVersion.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)[0]; string GameClient = LolVersion2.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)[0]; LogTextBox("Latest League of Legends GameClient: " + GameClientSln); LogTextBox("Checking if League of Legends is Up-To-Date"); string LolLauncherVersion = new WebClient().DownloadString("http://l3cdn.riotgames.com/releases/live/projects/lol_air_client/releases/releaselisting_NA"); string LauncherVersion = LolLauncherVersion.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)[0]; if (Directory.Exists(Path.Combine(GameLocation, GameClientSln))) { LogTextBox("League of Legends is Up-To-Date"); //Client.LaunchGameLocation = Path.Combine(Client.GameLocation, GameClientSln); //C:\Riot Games\League of Legends\RADS\projects\lol_game_client\releases\0.0.0.243\deploy Client.LOLCLIENTVERSION = LolVersion2; //C:\Riot Games\League of Legends\RADS\solutions\lol_game_client_sln\releases\0.0.1.50\deploy Client.Location = Path.Combine(lolRootPath, "RADS", "solutions", "lol_game_client_sln", "releases", GameClientSln, "deploy"); //C:\Riot Games\League of Legends\RADS\projects\lol_air_client\releases\0.0.1.104 Client.LoLLauncherLocation = Path.Combine(lolRootPath, "RADS", "projects", "lol_air_client", "releases", LauncherVersion, "deploy"); Client.RootLocation = lolRootPath; } else { LogTextBox("League of Legends is not Up-To-Date. Please Update League Of Legends"); return; } if (!Directory.Exists("RADS")) { Directory.CreateDirectory("RADS"); } if (!File.Exists(Path.Combine("RADS", "VERSION_LOL"))) { var VersionGAME = File.Create(Path.Combine("RADS", "VERSION_LOL")); VersionGAME.Write(encoding.GetBytes("0.0.0.0"), 0, encoding.GetBytes("0.0.0.0").Length); VersionGAME.Close(); } string LatestGame = patcher.GetLatestGame(); LogTextBox("League Of Legends Version: " + LatestGame); string GameVersion = File.ReadAllText(Path.Combine(Client.ExecutingDirectory, "RADS", "VERSION_LOL")); LogTextBox("Current League of Legends Version: " + GameVersion); RetrieveCurrentInstallation = false; string NGameLocation = ""; if (GameVersion != GameClient) { LogTextBox("Checking for existing League of Legends Installation"); NGameLocation = Path.Combine("League of Legends", "RADS"); if (Directory.Exists(NGameLocation)) { RetrieveCurrentInstallation = true; } else if (Directory.Exists(Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", NGameLocation))) { RetrieveCurrentInstallation = true; NGameLocation = Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", NGameLocation); } else { LogTextBox("Unable to find existing League of Legends. Copy your League of Legends folder into + " + Client.ExecutingDirectory + " to make the patching process quicker"); } if (RetrieveCurrentInstallation) { LogTextBox("Getting League Of Legends from " + NGameLocation); Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Copying League of Legends"; })); LogTextBox("Retrieved currently installed League of Legends"); LogTextBox("Current League of Legends Version: " + NGameLocation); } } if (GameVersion != LatestGame) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Retrieving League of Legends"; })); } #endregion lol_game_client FinishPatching(LatestVersion); }); bgThead.Start(); }