Example #1
0
        private async Task CheckForPresetsAsync(bool isAutomaticUpdateCheck)
        {
            FoundPresetRelease = null;

            var foundRelease = await _updateHelper.GetAvailableReleasesAsync(ReleaseType.Presets);

            if (foundRelease == null)
            {
                return;
            }

            var isNewReleaseAvailable = foundRelease.Version > new Version(PresetsVersionValue);

            if (isNewReleaseAvailable)
            {
                IsPresetUpdateAvailable = true;
                FoundPresetRelease      = foundRelease;

                if (isAutomaticUpdateCheck)
                {
                    if (_messageBoxService.ShowQuestion(Application.Current.MainWindow,
                                                        _localizationHelper.GetLocalization("UpdateAvailablePresetMessage"),
                                                        _localizationHelper.GetLocalization("UpdateAvailableHeader")))
                    {
                        ExecuteDownloadPresets(null);
                    }
                }
            }
        }
Example #2
0
        private AvailableRelease CheckForAvailableRelease(ReleaseType releaseType)
        {
            AvailableRelease result = null;

            var tagToCheck = GetTagForReleaseType(releaseType);

            if (string.IsNullOrWhiteSpace(tagToCheck))
            {
                return(result);
            }

            var supportPrerelease = _appSettings.UpdateSupportsPrerelease;

            logger.Debug($"Update supports prereleases: {supportPrerelease}");

            var foundGithubRelease = AllReleases.FirstOrDefault(x => !x.Draft &&
                                                                x.Prerelease == supportPrerelease &&
                                                                x.TagName.StartsWith(tagToCheck, StringComparison.OrdinalIgnoreCase));

            //for testing - latest preset and icons release
            //var latestPresetRelease = releases.FirstOrDefault(x => !x.Draft && !x.Prerelease && x.TagName.StartsWith("Presetsv3.0.0", StringComparison.OrdinalIgnoreCase));
            if (foundGithubRelease == null)
            {
                return(result);
            }

            var versionString = foundGithubRelease.TagName.Replace(tagToCheck, string.Empty).Trim();

            if (!Version.TryParse(versionString, out var foundVersion))
            {
                logger.Warn($"Could not get version of preset release. {nameof(foundGithubRelease.TagName)}: {foundGithubRelease.TagName}");
                return(result);
            }

            result = new AvailableRelease
            {
                Id      = foundGithubRelease.Id,
                Type    = releaseType,
                Version = foundVersion
            };

            return(result);
        }
Example #3
0
        public async Task <string> DownloadReleaseAsync(AvailableRelease releaseToDownload)
        {
            try
            {
                if (AllReleases == null)
                {
                    return(null);
                }

                logger.Debug($"Download asset for release {releaseToDownload.Version}.");

                var release = AllReleases.FirstOrDefault(x => x.Id == releaseToDownload.Id);
                if (release == null)
                {
                    logger.Warn($"No release found for {nameof(releaseToDownload.Id)}: {nameof(releaseToDownload.Id)}.");
                    return(null);
                }

                var assetName = GetAssetNameForReleaseType(releaseToDownload.Type);
                if (string.IsNullOrWhiteSpace(assetName))
                {
                    logger.Warn($"No asset name found for type: {releaseToDownload.Type}.");
                    return(null);
                }

                var foundAsset = release.Assets.FirstOrDefault(x => x.Name.StartsWith(assetName, StringComparison.OrdinalIgnoreCase));
                if (foundAsset == null && releaseToDownload.Type == ReleaseType.Presets)
                {
                    //check for release of presets with icons
                    releaseToDownload.Type = ReleaseType.PresetsAndIcons;
                    assetName  = GetAssetNameForReleaseType(releaseToDownload.Type);
                    foundAsset = release.Assets.FirstOrDefault(x => x.Name.StartsWith(assetName, StringComparison.OrdinalIgnoreCase));
                }

                if (foundAsset == null)
                {
                    logger.Warn($"No asset found with name: {assetName}.");
                    return(null);
                }

                //download file to temp directory
                var pathToDownloadedFile = await DownloadFileAsync(foundAsset.BrowserDownloadUrl, Path.GetTempFileName()).ConfigureAwait(false);

                if (string.IsNullOrWhiteSpace(pathToDownloadedFile))
                {
                    logger.Warn("Could not get path to downloaded file.");
                    return(null);
                }

                //move file to app directory
                var tempFileInfo = new FileInfo(pathToDownloadedFile);

                var pathToUpdatedPresetsFile = GetPathToUpdatedPresetsFile(releaseToDownload.Type);
                if (string.IsNullOrWhiteSpace(pathToUpdatedPresetsFile))
                {
                    logger.Warn($"Could not get path to updated presets file for type: {releaseToDownload.Type}.");
                    return(null);
                }

                if (File.Exists(pathToUpdatedPresetsFile))
                {
                    FileHelper.ResetFileAttributes(pathToUpdatedPresetsFile);
                    File.Delete(pathToUpdatedPresetsFile);
                }

                tempFileInfo.MoveTo(pathToUpdatedPresetsFile);

                return(pathToUpdatedPresetsFile);
            }
            catch (Exception ex)
            {
                logger.Error(ex, "Error downloading release.");
                App.ShowMessageWithUnexpectedErrorAndExit();
                return(null);
            }
        }
Example #4
0
        private AvailableRelease CheckForAvailableRelease(ReleaseType releaseType)
        {
            AvailableRelease result = null;

            var tagToCheck = GetTagForReleaseType(releaseType);

            if (string.IsNullOrWhiteSpace(tagToCheck))
            {
                return(result);
            }

            logger.Debug($"Check for updates with tag: \"{tagToCheck}\"");

            var supportPrerelease = _appSettings.UpdateSupportsPrerelease;

            logger.Debug($"Update supports prereleases: {supportPrerelease}");

            Release foundPrerelease = null;

            if (supportPrerelease)
            {
                foundPrerelease = AllReleases.FirstOrDefault(x => !x.Draft && x.Prerelease && x.TagName.StartsWith(tagToCheck, StringComparison.OrdinalIgnoreCase));
            }

            Version versionPrerelease = default;

            if (foundPrerelease != null)
            {
                versionPrerelease = ParseVersionFromTag(foundPrerelease, tagToCheck);
                logger.Debug($"Found version (prerelease): {versionPrerelease}");
            }

            var     foundRelease   = AllReleases.FirstOrDefault(x => !x.Draft && !x.Prerelease && x.TagName.StartsWith(tagToCheck, StringComparison.OrdinalIgnoreCase));
            Version versionRelease = default;

            if (foundRelease != null)
            {
                versionRelease = ParseVersionFromTag(foundRelease, tagToCheck);
                logger.Debug($"Found version: {versionRelease}");
            }

            if (versionPrerelease == default && versionRelease == default)
            {
                return(result);
            }

            if (versionPrerelease != default && versionPrerelease > versionRelease)
            {
                result = new AvailableRelease
                {
                    Id      = foundPrerelease.Id,
                    Type    = releaseType,
                    Version = versionPrerelease
                };
            }
            else
            {
                result = new AvailableRelease
                {
                    Id      = foundRelease.Id,
                    Type    = releaseType,
                    Version = versionRelease
                };
            }

            return(result);
        }
Example #5
0
        public async Task <string> DownloadReleaseAsync(AvailableRelease releaseToDownload)
        {
            try
            {
                if (AllReleases == null)
                {
                    return(null);
                }

                var release = AllReleases.FirstOrDefault(x => x.Id == releaseToDownload.Id);
                if (release == null)
                {
                    Trace.WriteLine($"No release found for {nameof(releaseToDownload.Id)}: {nameof(releaseToDownload.Id)}.");
                    return(null);
                }

                var assetName = GetAssetNameForReleaseType(releaseToDownload.Type);
                if (string.IsNullOrWhiteSpace(assetName))
                {
                    Trace.WriteLine($"No asset name found for type: {releaseToDownload.Type}.");
                    return(null);
                }

                var foundAsset = release.Assets.FirstOrDefault(x => x.Name.StartsWith(assetName, StringComparison.OrdinalIgnoreCase));
                if (foundAsset == null)
                {
                    Trace.WriteLine($"No asset found with name: {assetName}.");
                    return(null);
                }

                //download file to temp directory
                var pathToDownloadedFile = await DownloadFileAsync(foundAsset.BrowserDownloadUrl, Path.GetTempFileName()).ConfigureAwait(false);

                if (string.IsNullOrWhiteSpace(pathToDownloadedFile))
                {
                    Trace.WriteLine($"Could not get path to downloaded file.");
                    return(null);
                }

                //move file to app directory
                var tempFileInfo = new FileInfo(pathToDownloadedFile);

                var pathToUpdatedPresetsFile = GetPathToUpdatedPresetsFile(releaseToDownload.Type);
                if (string.IsNullOrWhiteSpace(pathToUpdatedPresetsFile))
                {
                    Trace.WriteLine($"Could not get path to updated presets file for type: {releaseToDownload.Type}.");
                    return(null);
                }

                if (File.Exists(pathToUpdatedPresetsFile))
                {
                    FileHelper.ResetFileAttributes(pathToUpdatedPresetsFile);
                    File.Delete(pathToUpdatedPresetsFile);
                }

                tempFileInfo.MoveTo(pathToUpdatedPresetsFile);

                return(pathToUpdatedPresetsFile);
            }
            catch (Exception ex)
            {
                App.LogErrorMessage(ex);
                return(null);
            }
        }