Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
 internal void Initialize(R1Executable r1Executable)
 {
     Executable = r1Executable;
     RefreshCmd.ExecuteIfItCan(null);
 }
Exemple #6
0
        internal async Task <bool> Edit(R1Executable remoteExe, string versionChanges)
        {
            var dict = await Update(remoteExe, versionChanges);

            return(dict != null);
        }