private void StartPatcher() { bgThread = new Thread(() => { LogTextBox("Starting Patcher"); WebClient client = new WebClient(); 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); 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 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(); 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 Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "40%"; TotalProgessBar.Value = 40; })); #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; 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"; })); } #endregion lol_air_client #region 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: " + GameLocation); } } if (GameVersion != LatestGame) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Retrieving League of Legends"; })); } #endregion lol_game_client 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); string VersionString = ""; try { VersionString = client.DownloadString(new Uri("http://eddy5641.github.io/LegendaryClient/update.html")); string[] VersionSplit = VersionString.Split('|'); LogTextBox("Update data: " + VersionSplit[0] + "|" + VersionSplit[1]); } catch { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Could not retrieve update files!"; })); //return; } //Client.updateData = LegendaryUpdate.PopulateItems(); //#if !DEBUG //Dont patch client while in DEBUG UpdateData legendaryupdatedata = new UpdateData(); var version = new WebClient().DownloadString("http://eddy5641.github.io/LegendaryClient/Version"); LogTextBox("Most Up to date LegendaryClient Version: " + version); string versionAsString = version; var versiontoint = new WebClient().DownloadString("http://eddy5641.github.io/LegendaryClient/VersionAsInt"); int VersionAsInt = Convert.ToInt32(versiontoint); if (VersionAsInt != Client.LegendaryClientReleaseNumber) { 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; } //LogTextBox("LC Update Json Data: " + json); //#endif //LogTextBox("LegendaryClient is up to date"); //LogTextBox("LegendaryClient does not have a patcher downloader. Do not be worried by this."); //Client.Log("[Debug]: LegendaryClient Is Up To Date"); #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; string AirLocation = ""; 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"); var localAirLocation = Path.Combine("RADS", "projects", "lol_air_client", "releases"); if (Directory.Exists(AirLocation)) { RetrieveCurrentInstallation = true; } else if (string.IsNullOrEmpty(lolRootPath) == false && Directory.Exists(Path.Combine(lolRootPath, localAirLocation))) { RetrieveCurrentInstallation = true; AirLocation = Path.Combine(lolRootPath, localAirLocation); } 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 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); Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "60%"; TotalProgessBar.Value = 60; })); } } 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"); 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; Client.Location = Path.Combine(lolRootPath, "RADS", "projects", "lol_game_client", "releases", GameClient, "deploy"); } 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"; })); GameVersion = patcher.GetCurrentGameInstall(NGameLocation); 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"; })); } //No Need to download this anymore, I will auto detect League of Legends /* if (!Directory.Exists(Path.Combine(Client.ExecutingDirectory, "RADS", "lol_game_client"))) { Directory.CreateDirectory(Path.Combine(Client.ExecutingDirectory, "RADS", "lol_game_client")); } if (!File.Exists(Path.Combine(Client.ExecutingDirectory, "RADS", "VERSION_LOL"))) { var VersionLOL = File.Create(Path.Combine(Client.ExecutingDirectory, "RADS", "VERSION_LOL")); VersionLOL.Write(encoding.GetBytes("0.0.0.0"),0,encoding.GetBytes("0.0.0.0").Length); VersionLOL.Close(); } LogTextBox("Checking version..."); CheckIfPatched(); if (!LoLDataIsUpToDate) { LogTextBox("Not up-to-date!"); if (LolDataVersion == "0.0.0.0") { LogTextBox("Checking for existing LoL installation"); string FileArchivesDirectory = Path.Combine("League of Legends", "RADS", "projects", "lol_game_client", "filearchives"); string MainVersionLocation = Path.Combine("League of Legends", "RADS", "projects", "lol_game_client", "releases"); if (Directory.Exists(FileArchivesDirectory)) { ExpandRAF(FileArchivesDirectory); WriteLatestVersion(MainVersionLocation); } else if (Directory.Exists(Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", FileArchivesDirectory))) { ExpandRAF(Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", FileArchivesDirectory)); WriteLatestVersion(Path.Combine(System.IO.Path.GetPathRoot(Environment.SystemDirectory), "Riot Games", MainVersionLocation)); } } string PackageManifest = ""; int CurrentVersionNumber = Convert.ToInt32(LolDataVersion.Split('.')[3]); int LatestVersionNumber = Convert.ToInt32(LatestLolDataVersion.Split('.')[3]); LogTextBox("Retrieving Package Manifest"); //How will this happen, idk but we will never know if it will happen InvalidVersion: if (CurrentVersionNumber >= LatestVersionNumber) { //Already updated, just fake numbers in the release listing and you can ignore them } try { PackageManifest = new WebClient().DownloadString("http://l3cdn.riotgames.com/releases/live/projects/lol_game_client/releases/0.0.0." + LatestVersionNumber + "/packages/files/packagemanifest"); } catch { LogTextBox(LatestVersionNumber + " is not valid"); LatestVersionNumber -= 1; goto InvalidVersion; } //Do online patch of LoLData from current version onwards if (LolDataVersion != LatestLolDataVersion) { LogTextBox("Updating from " + LolDataVersion + " -> " + LatestLolDataVersion); UpdateFrom(LolDataVersion, PackageManifest); WriteLatestVersion(LatestLolDataVersion); } LogTextBox("Patching League of Legends.exe..."); //Everytime we update download all .exe and dll files GetAllExe(PackageManifest); } LogTextBox("Done!"); //*/ #endregion lol_game_client FinishPatching(); }); bgThead.Start(); }
private void StartPatcher() { bgThread = new Thread(() => { LogTextBox("Starting Patcher"); <<<<<<< HEAD Client.Log("Patcher Starting"); ======= >>>>>>> master 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); Client.Log("[DEBUG]: 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!"; <<<<<<< HEAD Client.Log("[Warn]: Failed to retrieve update files"); ======= Client.Log("Couldn't get update files for LegendaryClient"); >>>>>>> master })); //return; } string[] VersionSplit = VersionString.Split('|'); LogTextBox("Update data: " + VersionSplit[0] + "|" + VersionSplit[1]); <<<<<<< HEAD Client.updateData = LegendaryUpdate.PopulateItems(); ======= Client.Log("Update data: " + VersionSplit[0] + "|" + VersionSplit[1]); >>>>>>> master #if !DEBUG //Dont patch client while in DEBUG UpdateData legendaryupdatedata = new UpdateData(); var version = new WebClient().DownloadString("http://eddy5641.github.io/LegendaryClient/Version"); LogTextBox("Most Up to date LegendaryClient Version: " + version); string versionAsString = version; var versiontoint = new WebClient().DownloadString("http://eddy5641.github.io/LegendaryClient/VersionAsInt"); int VersionAsInt = Convert.ToInt32(versiontoint); if (VersionAsInt != Client.LegendaryClientReleaseNumber) { 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.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; } <<<<<<< HEAD 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; } //LogTextBox("LC Update Json Data: " + json); #endif //LogTextBox("LegendaryClient is up to date"); //LogTextBox("LegendaryClient does not have a patcher downloader. Do not be worried by this."); //Client.Log("[Debug]: LegendaryClient Is Up To Date"); ======= #endif LogTextBox("LegendaryClient is up to date"); Client.Log("LC Patched"); >>>>>>> master #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(); if (!DDragonDownloadURL.StartsWith("http:")) DDragonDownloadURL = "http:" + DDragonDownloadURL; LogTextBox("DataDragon Version: " + patcher.DDragonVersion); Client.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); Client.Version = DDragonVersion; Client.Log("[Debug]: 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")); 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); <<<<<<< HEAD Client.Version = DDragonVersion; ======= >>>>>>> master VersionDDragon.Close(); } #endregion DDragon Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { TotalProgressLabel.Content = "40%"; TotalProgessBar.Value = 40; })); #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; 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"; })); } #endregion lol_air_client #region 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"); string rootPath = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\Software\Riot Games\League Of Legends", "Path", "").ToString(); if (Directory.Exists(GameLocation)) { RetrieveCurrentInstallation = true; } else if (Directory.Exists(Path.Combine(rootPath, "RADS"))) { RetrieveCurrentInstallation = true; GameLocation = Path.Combine(rootPath, "RADS"); } 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: " + GameLocation); } } if (GameVersion != LatestGame) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { CurrentProgressLabel.Content = "Retrieving League of Legends"; })); } #endregion lol_game_client FinishPatching(); }); bgThread.IsBackground = true; bgThread.Start(); }