private List <ReleaseManifestFileEntry> EnumerateFiles(string projectName, ref string projectVersion, string filter = null, string filesRevision = null) { if (projectVersion == "LATEST") { projectVersion = GetLatestRelease(projectName); } if (filesRevision == "LATEST") { filesRevision = projectVersion; } var releaseURL = String.Format("{0}/releases/{1}/projects/{2}/releases/{3}", LeagueCDN, Platform, projectName, projectVersion); webClient.DownloadFile(releaseURL + "/releasemanifest", "tempmanifest"); var releaseManifest = new ReleaseManifestFile("tempmanifest"); File.Delete("tempmanifest"); var files = new List <ReleaseManifestFileEntry>(); EnumerateManifestFolderFiles(releaseManifest.Project, files); if (filesRevision != null) { uint revisionValue = GetReleaseValue(filesRevision); files = files.FindAll(x => x.Version == revisionValue); } if (filter != null) { Regex regex = new Regex(filter); files = files.FindAll(x => regex.IsMatch(x.GetFullPath())); } return(files); }
static void ReleaseManifestTest() { ReleaseManifestFile relMan = new ReleaseManifestFile(new MemoryStream(new System.Net.WebClient().DownloadData("http://l3cdn.riotgames.com/releases/live/projects/lol_game_client/releases/0.0.0.0/releasemanifest"))); relMan.Project.Remove(); relMan.Write("myrealm"); using (FileStream fs = File.Open("myrealm2", FileMode.Create)) { relMan.Write(fs); } }
public void InstallProject(string directory, string projectName, string projectVersion, uint?deployMode, string solutionName = null, string solutionVersion = null) { var projectsURL = String.Format("{0}/releases/{1}/projects/{2}", LeagueCDN, Platform, projectName); var projectFolder = String.Format("{0}/RADS/projects/{1}", directory, projectName); var releaseFolder = String.Format("{0}/releases/{1}", projectFolder, projectVersion); var deployFolder = releaseFolder + "/deploy"; var managedFilesFolder = projectFolder + "/managedfiles"; var archivesFolder = projectFolder + "/filearchives"; Directory.CreateDirectory(deployFolder); Directory.CreateDirectory(managedFilesFolder); Directory.CreateDirectory(archivesFolder); string solutionDeployFolder = null; if (solutionName != null) { solutionDeployFolder = String.Format("{0}/RADS/solutions/{1}/releases/{2}/deploy", directory, solutionName, solutionVersion); } // Getting release manifest Console.WriteLine("Downloading manifest for project {0}, release {1}...", projectName, projectVersion); var currentProjectURL = String.Format("{0}/releases/{1}", projectsURL, projectVersion); webClient.DownloadFile(currentProjectURL + "/releasemanifest", releaseFolder + "/releasemanifest"); var releaseManifest = new ReleaseManifestFile(releaseFolder + "/releasemanifest"); // Downloading files var files = new List <ReleaseManifestFileEntry>(); EnumerateManifestFolderFiles(releaseManifest.Project, files); files.Sort((x, y) => (x.Version.CompareTo(y.Version))); string currentArchiveVersion = null; RAF currentRAF = null; foreach (ReleaseManifestFileEntry file in files) { string fileFullPath = file.GetFullPath(); string fileVersion = GetReleaseString(file.Version); Console.Write("■ Downloading {0}/{1}", fileVersion, fileFullPath); bool compressed = false; var fileURL = Uri.EscapeUriString(String.Format("{0}/releases/{1}/files/{2}", projectsURL, fileVersion, fileFullPath)); if (file.SizeCompressed > 0) { fileURL += ".compressed"; compressed = true; } byte[] fileData; try { fileData = webClient.DownloadData(fileURL); // Change deploy mode if specified if (deployMode != null) { file.DeployMode = (ReleaseManifestFile.DeployMode)deployMode; } if (file.DeployMode == RAFCompressed || file.DeployMode == RAFRaw) { // File has to be put in a RAF if (currentRAF == null || currentArchiveVersion != fileVersion) { currentRAF?.Save(); currentRAF?.Dispose(); currentArchiveVersion = fileVersion; currentRAF = new RAF(String.Format("{0}/{1}/Archive_1.raf", archivesFolder, fileVersion)); } if (compressed) { currentRAF.AddFile(fileFullPath, file.DeployMode == RAFCompressed ? fileData : DecompressZlib(fileData), false); } else { currentRAF.AddFile(fileFullPath, fileData, file.DeployMode == RAFCompressed); } } else if (file.DeployMode == Managed) { // File will be in managedfiles folder var filePath = String.Format("{0}/{1}/{2}", managedFilesFolder, fileVersion, fileFullPath); Directory.CreateDirectory(Path.GetDirectoryName(filePath)); File.WriteAllBytes(filePath, compressed ? DecompressZlib(fileData) : fileData); } else if (file.DeployMode == Deployed0 || file.DeployMode == Deployed4) { // File will be in deploy folder var deployPath = String.Format("{0}/{1}", deployFolder, fileFullPath); Directory.CreateDirectory(Path.GetDirectoryName(deployPath)); byte[] decompressedData = compressed ? DecompressZlib(fileData) : fileData; File.WriteAllBytes(deployPath, decompressedData); if (solutionDeployFolder != null && file.DeployMode == Deployed4) { // File will also be in solution folder var solutionPath = String.Format("{0}/{1}", solutionDeployFolder, fileFullPath); Directory.CreateDirectory(Path.GetDirectoryName(solutionPath)); File.WriteAllBytes(solutionPath, decompressedData); } } Console.SetCursorPosition(0, Console.CursorTop); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("■"); } catch (Exception) { Console.SetCursorPosition(0, Console.CursorTop); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("■"); } Console.ResetColor(); } currentRAF?.Dispose(); releaseManifest.Save(); File.Create(releaseFolder + "/S_OK").Close(); }