private async Task <bool> DownloadAndSwap(R1Executable latest) { var macAddr = _validr.PingNode.RegisteredMacAddress; var partsList = await _downloadr.GetPartsList(latest.FileVersion, macAddr); if (partsList.Count == 0) { return(false); } var exePath = await _downloadr.DownloadAndExtract(partsList, latest.FileHash); if (exePath.IsBlank()) { return(false); } var ok = ReplaceCurrentExeWith(exePath); if (ok) { _downloadr.DeleteLastTempDir(); } return(ok); }
public static R1Executable FromFile(string exePath) { var r1e = new R1Executable(); var inf = new FileInfo(exePath); if (!inf.Exists) { return(null); } r1e.FileName = inf.Name; r1e.FileSize = inf.Length; r1e.FileHash = inf.SHA1ForFile(); r1e.FileVersion = inf.FileVersion(); r1e.FullPathOrURL = exePath; return(r1e); }
internal static R1SplitPart ToR1Part(string partPath, R1Executable r1Exe, int partNumber, int totalParts) { var part = new R1SplitPart(); var inf = new FileInfo(partPath); part.FileName = inf.Name; part.Executable = r1Exe; part.ExeVersion = r1Exe.FileVersion; part.PartHash = inf.SHA1ForFile(); part.FullPathOrURL = partPath; part.Base64Content = inf.Base64Content(); part.PartNumber = partNumber; part.TotalParts = totalParts; part.uid = r1Exe.uid; return(part); }
internal async Task <bool> UploadNew (R1Executable localExe, double?maxVolumeSizeMB) { IsBusy = true; Status = "Compressing ..."; var tmpCopy = CopyToTemp(localExe.FullPathOrURL); var splitParts = new List <R1SplitPart>(); var partPaths = await SevenZipper1.Compress(tmpCopy, null, maxVolumeSizeMB, ".data"); for (int i = 0; i < partPaths.Count; i++) { Status = $"Uploading part {i + 1} of {partPaths.Count} ..."; var r1Part = FilePart.ToR1Part(partPaths[i], localExe, i + 1, partPaths.Count); var node = await Create(r1Part, () => GetSplitPartIDsByHash(r1Part.PartHash)); if (node == null) { return(false); } splitParts.Add(r1Part); } var ok = await ValidateDownload(splitParts, localExe.FileHash); if (!ok) { //todo: delete corrupted uploaded parts return(Alerter.Warn("Uploaded parts are invalid.", false)); } IsBusy = false; return(true); }
internal void Initialize(R1Executable r1Executable) { Executable = r1Executable; RefreshCmd.ExecuteIfItCan(null); }
internal async Task <bool> Edit(R1Executable remoteExe, string versionChanges) { var dict = await Update(remoteExe, versionChanges); return(dict != null); }