예제 #1
0
        public async Task <bool> DownloadLanPlayExecutable(IRelease release)
        {
            if (release == null)
            {
                return(false);
            }
            IAsset executableAsset = release.Assets.FirstOrDefault(a => a.Name == executableName);

            if (executableAsset == null)
            {
                return(false);
            }

            try
            {
                using (HttpResponseMessage response = await httpClient.GetAsync(executableAsset.BrowserDownloadUrl))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        await response.Content.ReadAsFileAsync(executableName, true);
                    }
                }
                return(true);
            }
            catch (HttpRequestException)
            {
                return(false);
            }
        }
예제 #2
0
 public void DeleteRelease(IRelease release)
 {
     using (var service = DataLocator.GetPersistenceService())
     {
         service.Object.Delete(release.Version, release);
     }
 }
예제 #3
0
        public ReleaseViewModelBig ToBigReleaseViewModel(IRelease release)
        {
            ReleaseViewModelBig toReturn = new ReleaseViewModelBig()
            {
                Id            = release.Id,
                Title         = release.Title,
                Followed      = release.IsFollowed,
                FollowerCount = release.FollowerCount,
                ReleaseDate   = release.ReleaseDate,
                ImgLocation   = release.ImgLocation,
                Category      = new CategoryViewModel
                {
                    ImgLocation = release.Category.ImgLocation,
                    Name        = release.Category.Name
                },
                Description = release.Description,
                Owner       = new UserViewModel
                {
                    ImgLocation = release.User.ImgLocation,
                    Username    = release.User.Username
                }
            };

            return(toReturn);
        }
예제 #4
0
        public Release Convert(IRelease releaseBO)
        {
            var convertedRelease = new Release
            {
                Version     = releaseBO.Version,
                Description = releaseBO.Description,
                DueDate     = releaseBO.DueDate
            };

            foreach (var releaseunitBO in releaseBO.UnitList)
            {
                var convertedReleaseUnit = new ReleaseUnit {
                    Name = releaseunitBO.Name
                };
                foreach (var stakeholderBO in releaseunitBO.StakeholderList)
                {
                    convertedReleaseUnit.StakeholderList.Add(Convert(stakeholderBO));
                }
                foreach (var releaseElementBO in releaseunitBO.ReleaseElementList)
                {
                    convertedReleaseUnit.ReleaseElementsList.Add(Convert(releaseElementBO));
                }
                convertedRelease.UnitList.Add(convertedReleaseUnit);
            }
            return(convertedRelease);
        }
예제 #5
0
        public async Task LatestRelease_MultipleReleases_ReturnsIRelease()
        {
            IReposApi api    = GetReposApi(_repoWithReleases);
            IRelease  latest = await api.LatestRelease().ConfigureAwait(false);

            Assert.IsNotNull(latest, $"{nameof(api.LatestRelease)}() should return an IRelease object for a repo that has at least one release.");
        }
예제 #6
0
        public IActionResult Search(string searchQuery)
        {
            List <ReleaseViewModelSmall> vm = new List <ReleaseViewModelSmall>();

            if (string.IsNullOrEmpty(searchQuery))
            {
                return(RedirectToAction("index"));
            }
            foreach (int id in releaseLogic.SearchReleases(searchQuery))
            {
                IRelease releaseModel             = releaseLogic.GetReleaseById(id);
                ReleaseViewModelSmall tempRelease = new ReleaseViewModelSmall
                {
                    Title         = releaseModel.Title,
                    Id            = releaseModel.Id,
                    FollowerCount = releaseModel.FollowerCount,
                    ImgLocation   = releaseModel.ImgLocation,
                    ReleaseDate   = releaseModel.ReleaseDate,
                    Category      = new CategoryViewModel
                    {
                        ImgLocation = releaseModel.Category.ImgLocation
                    }
                };
                vm.Add(tempRelease);
            }
            return(View(vm));
        }
예제 #7
0
 public Release(IRelease release)
 {
     Id        = release.Id;
     ProjectId = release.ProjectId;
     Version   = release.Version;
     Created   = release.Created;
 }
예제 #8
0
        /// <inheritdoc />
        public async Task <IUpdateCheckResult> CheckAsync()
        {
            IReposApi api = _apiFactory.BuildReposApi(_username, _repoName);

            try {
                IRelease latest = await api.LatestRelease().ConfigureAwait(false);

                Version latestVersion = new Version(latest.tag_name.TrimStart('v'));
                return(latestVersion > ApplicationVersion
                                        ? latest.assets.Any()
                                                ? UpdateCheckResult.FromLatestRelease(latest)
                                                : new UpdateCheckResult(EventLevel.Error, Messages.NoUpdateTitle, Messages.NoUpdateNoFiles)
                                        : new UpdateCheckResult(EventLevel.Informational, Messages.NoUpdateTitle, Messages.NoUpdateAlreadyLatest));
            } catch (WebException wex) {
                switch (wex.Status)
                {
                case WebExceptionStatus.NameResolutionFailure:
                case WebExceptionStatus.ConnectFailure:
                    return(new UpdateCheckResult(EventLevel.Error, Messages.NoUpdateTitle, Messages.NoUpdateCannotConnect));

                case WebExceptionStatus.ProtocolError:
                    if ((wex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound)
                    {
                        return(new UpdateCheckResult(EventLevel.Error, Messages.NoUpdateTitle, Messages.NoUpdateNoReleases));
                    }
                    goto default;                              // we only handled not found, so anything else is a random other error

                default:
                    return(new UpdateCheckResult(EventLevel.Error, Messages.NoUpdateTitle, string.Format(Messages.NoUpdateError, wex.Message)));
                }
            }
        }
예제 #9
0
        public static UIElement ToValue(this IRelease release, PropertyInfo property)
        {
            if (release == null)
            {
                throw new ArgumentNullException(nameof(release));
            }

            if (property == null)
            {
                throw new ArgumentNullException(nameof(property));
            }

            Object value = property.GetValue(release);

            if (value is IOwner)
            {
                return((value as IOwner).ToElement());
            }

            if ((value as IEnumerable)?.GetType().GetGenericArguments().FirstOrDefault() == typeof(IAsset))
            {
                return((value as IEnumerable <IAsset>).ToElement());
            }

            return(value.ToValueElement(ExtensionHelper.ValuePadding));
        }
예제 #10
0
        private static IRelease GetSameVersionRelease()
        {
            IRelease release = A.Fake <IRelease>();

            A.CallTo(() => release.tag_name).Returns("v" + GetThisVersion());
            return(release);
        }
예제 #11
0
        private static IReposApi GetReposApi(IRelease latestRelease)
        {
            IReposApi api = A.Fake <IReposApi>();

            A.CallTo(() => api.LatestRelease()).Returns(Task.FromResult(latestRelease));
            return(api);
        }
예제 #12
0
 private void ResetCurrentWordPoints()
 {
     for (int i = 0; i < currentWordScore.Keys.Count(); i++)
     {
         IRelease key = currentWordScore.ElementAt(i).Key;
         currentWordScore[key] = 0;
     }
 }
예제 #13
0
 protected void AutoRelease(IRelease e)
 {
     if (_autoReleaseResources == null)
     {
         _autoReleaseResources = new List <IRelease>();
     }
     _autoReleaseResources.Add(e);
 }
예제 #14
0
 /// <summary>Adds a barcode to the request.</summary>
 /// <param name="release">The release to which <paramref name="barcode"/> should be added.</param>
 /// <param name="barcode">The barcode to add. This must be a valid EAN.</param>
 /// <returns>This submission request.</returns>
 public BarcodeSubmission Add(IRelease release, string barcode)
 {
     if (release == null)
     {
         return(this);
     }
     return(this.Add(release.MbId, barcode));
 }
예제 #15
0
 public ReleaseController(
     IRelease api,
     IAppSettings appSettings,
     ILogger <ReleaseController> logger) : base()
 {
     this.api         = api;
     this.appSettings = appSettings;
     this.logger      = logger;
 }
예제 #16
0
        /// <summary>
        /// Create a result from a release.  Use when there is a newer release to upgrade to.
        /// </summary>
        /// <param name="latest">Latest release</param>
        /// <returns>Result with update available</returns>
        internal static UpdateCheckResult FromLatestRelease(IRelease latest)
        {
            string bitnessFilter = Environment.Is64BitProcess
                                ? "_x64"
                                : "_x86";
            IAsset bestAsset = latest.assets.FirstOrDefault(asset => asset.name.Contains(bitnessFilter)) ?? latest.assets?[0];

            return(new UpdateCheckResult(latest.name, latest.body, bestAsset.size, bestAsset.browser_download_url));
        }
        private void AddHeader(IRelease source, Grid parent, Thickness indent, Int32 row, Int32 col)
        {
            StackPanel panel = new StackPanel
            {
                Orientation = Orientation.Horizontal
            };

            TextBlock header = new TextBlock()
            {
                Padding         = indent,
                Cursor          = Cursors.Hand,
                Foreground      = Brushes.Blue,
                TextDecorations = TextDecorations.Underline,
                Text            = source.Name,
                Tag             = source,
                ToolTip         = "Click to show all release details...",
                FontSize        = this.repositoryViewer.FontSize * 1.5,
                FontWeight      = FontWeights.SemiBold,
            };

            header.MouseLeftButtonUp += this.OnHeaderMouseLeftButtonUp;

            panel.Children.Add(header);

            if (!String.IsNullOrWhiteSpace(source.TagName))
            {
                TextBlock version = new TextBlock()
                {
                    Padding    = indent,
                    Text       = source.TagName,
                    FontSize   = this.repositoryViewer.FontSize * 1.5,
                    FontWeight = FontWeights.SemiBold,
                };

                panel.Children.Add(version);
            }

            DropDownButton button = new DropDownButton
            {
                Style    = Application.Current.Resources["TripleDotsDropDownButton"] as Style,
                DropDown = this.GetContextMenu(source),
                Margin   = new Thickness(10, 0, 0, 0),
                Padding  = new Thickness(3),
                Width    = 30,
                Height   = 30
            };

            panel.Children.Add(button);

            parent.Children.Add(panel);

            Grid.SetRow(panel, row);
            Grid.SetColumn(panel, col);
        }
예제 #18
0
        private static IRelease GetNewerVersionRelease(bool hasFiles)
        {
            IRelease release = A.Fake <IRelease>();

            A.CallTo(() => release.tag_name).Returns("v" + GetNewerVersion());
            if (hasFiles)
            {
                A.CallTo(() => release.assets).Returns(new IAsset[] { GetAsset() });
            }
            return(release);
        }
        public ProductDownload8InCheckbox([NotNull] IRelease release)
        {
            Assert.ArgumentNotNull(release, "release");

            this.name      = "Sitecore CMS";
            this.version   = release.Version;
            this.revision  = release.Revision;
            this.label     = release.Label;
            this.value     = new Uri(release.Downloads["zip"].First(x => x.StartsWith("http")));
            this.isEnabled = !ProductManager.Products.Any(this.CheckProduct);
        }
        private void AddDetails(IRelease source, Grid parent, Thickness indent, Int32 row, Int32 col)
        {
            Dictionary <String, Object> details = new Dictionary <String, Object>
            {
                { nameof(source.Author), source.Author.Login },      // Intentionally, null not checked!
                { nameof(source.CreatedAt), source.CreatedAt },
                { nameof(source.PublishedAt), source.PublishedAt },
                { nameof(source.Draft), source.Draft },
                { nameof(source.PreRelease), source.PreRelease },
            };

            Grid panel = new Grid();

            panel.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = GridLength.Auto
            });
            panel.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = GridLength.Auto
            });

            Int32 index = 0;

            foreach (KeyValuePair <String, Object> detail in details)
            {
                panel.RowDefinitions.Add(new RowDefinition()
                {
                    Height = GridLength.Auto
                });

                UIElement label = detail.Key.ToLabelElement(indent);

                panel.Children.Add(label);

                Grid.SetRow(label, index);
                Grid.SetColumn(label, 0);

                UIElement value = detail.Value.ToValueElement(indent);

                panel.Children.Add(value);

                Grid.SetRow(value, index);
                Grid.SetColumn(value, 1);

                index++;
            }

            parent.Children.Add(panel);

            Grid.SetRow(panel, row);
            Grid.SetColumn(panel, col);
        }
예제 #21
0
        private string GetNuGet([NotNull] IRelease release)
        {
            Assert.ArgumentNotNull(release, "release");

            var version = release.Version;

            if (version.Length == "x.x".Length)
            {
                version += ".0";
            }

            return(Environment.ExpandEnvironmentVariables(string.Format("%PROGRAMDATA%\\Sitecore\\NuGet\\{0}.{1}\\SC.{0}.{1}.nupkg", version, release.Revision)));
        }
        private void AddBody(IRelease source, Grid parent, Thickness indent, Int32 row, Int32 col)
        {
            if (String.IsNullOrWhiteSpace(source.Body))
            {
                return;
            }

            UIElement value = source.Body.ToValueElement(indent);

            parent.Children.Add(value);

            Grid.SetRow(value, row);
            Grid.SetColumn(value, col);
        }
예제 #23
0
        public static UIElement ToElement(this IRelease release)
        {
            if (release == null)
            {
                return(new UIElement());
            }

            PropertyInfo[] properties = typeof(IRelease).GetProperties(BindingFlags.Instance | BindingFlags.Public);

            if (properties == null || !properties.Any())
            {
                return(new UIElement());
            }

            Grid result = new Grid();

            result.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = GridLength.Auto
            });
            result.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = new GridLength(100, GridUnitType.Star)
            });

            Int32 rows = properties.Length;

            for (Int32 row = 0; row < rows; row++)
            {
                result.RowDefinitions.Add(new RowDefinition()
                {
                    Height = GridLength.Auto
                });

                PropertyInfo property = properties[row];

                Label label = release.ToLabel(property);
                result.Children.Add(label);
                Grid.SetRow(label, row);
                Grid.SetColumn(label, 0);

                UIElement value = release.ToValue(property);
                result.Children.Add(value);
                Grid.SetRow(value, row);
                Grid.SetColumn(value, 1);
            }

            return(result);
        }
예제 #24
0
        public ProductDownload8InCheckbox([NotNull] IRelease release)
        {
            Assert.ArgumentNotNull(release, nameof(release));

            name     = "Sitecore CMS";
            version  = release.Version.MajorMinor;
            revision = release.Revision;
            label    = release.Label;
            var distribution = release.DefaultDistribution;

            Assert.IsNotNull(distribution, nameof(distribution));

            _Value    = new Uri(distribution.Downloads.First(x => x.StartsWith("http")));
            isEnabled = !ProductManager.Products.Any(CheckProduct);
        }
예제 #25
0
        private void ApplyTermFrequencyInverseToScore(int releasesWithWord)
        {
            double termFrequencyInverse = Math.Log((double)releasesToSearchCount / (releasesWithWord + 1));

            if (termFrequencyInverse <= 0)
            {
                termFrequencyInverse = 0.004;
            }

            for (int i = 0; i < releasesWithScore.Keys.Count(); i++)
            {
                IRelease key   = currentWordScore.ElementAt(i).Key;
                double   score = currentWordScore[key] *= termFrequencyInverse;
                releasesWithScore[key] += score;
            }
        }
예제 #26
0
        public ProductDownloadInCheckbox([NotNull] IRelease release)
        {
            Assert.ArgumentNotNull(release, "release");

            this.name      = "Sitecore CMS";
            this.version   = release.Version;
            this.revision  = release.Revision;
            this.label     = release.Label;
            this.value     = new ReadOnlyCollection <Uri>(release.Downloads.SelectMany(x => x.Value).Where(x => x.StartsWith("http")).Select(x => new Uri(x)).ToArray());
            this.isEnabled = !ProductManager.Products.Any(this.CheckProduct);
            if (!this.isEnabled && this.name.EqualsIgnoreCase("Sitecore CMS") && !ProductManager.Products.Any(this.CheckAnalyticsProduct) && this.value.Count > 1)
            {
                this.isEnabled    = true;
                this.nameOverride = "Sitecore Analytics";
            }
        }
        public SitecoreDefaultsContext([NotNull] ISitecoreVersion sitecoreVersion, IServiceClient client = null)
        {
            Assert.ArgumentNotNull(sitecoreVersion, nameof(sitecoreVersion));

            Log.Info($"Initializing defaults context for {sitecoreVersion}");

            _Client = client ?? _DefaultServiceClient;

            try
            {
                Release = _Client.Products["Sitecore CMS"].Versions[sitecoreVersion.MajorMinorUpdate];
            }
            catch (Exception ex)
            {
                throw new ResourceNotAvailableException(ResourceType.SitecoreInformation, $"SitecoreDefaults (cannot find {sitecoreVersion} release). " + ContactSupportMessage, ex);
            }
        }
        public void ShowDetails(Object requester, IRelease release)
        {
            if (requester == null || release == null)
            {
                return;
            }

            foreach (Object panel in this.panels)
            {
                if (panel is IReleaseVisualizer visualizer)
                {
                    visualizer.Requester = requester;
                    visualizer.Release   = release;

                    this.ShowPanel(visualizer);
                }
            }
        }
        private void DownloadRelease(IRelease release, string cookie, ManifestInformation manifestInformation, string tempDir)
        {
            var downloadManager = new DownloadManager();
            var progress        = new ProgressBar();

            downloadManager.OnProgressChanged += (block, l, totalPercentage) =>
            {
                Console.ForegroundColor = ConsoleColor.Green;
                progress.Report((double)totalPercentage / 100);
            };

            downloadManager.OnDownloadCompleted += result =>
            {
                if (progress != null)
                {
                    progress.Dispose();
                    progress = null;
                }

                if (!File.Exists(result.File))
                {
                    throw new IOException($"File '{result.File}' does not exist");
                }

                var tempFile = $"{Path.GetFileNameWithoutExtension(result.File)} (copy).zip";
                if (File.Exists(tempFile))
                {
                    File.Delete(tempFile);
                }

                File.Copy(result.File, tempFile);

                var sitecoreVersionIdentifier = Path.GetFileNameWithoutExtension(result.File);

                if (ExtractAssemblies(tempDir, tempFile, sitecoreVersionIdentifier))
                {
                    ScanAssembliesAndUpdateManifest(manifestInformation, tempDir, sitecoreVersionIdentifier, result.ReleaseVersion);
                }

                File.Delete(tempFile);
            };

            downloadManager.Download(release, cookie, tempDir);
        }
        // Protected members

        protected override Uri GetWebDriverUri(IWebBrowserInfo webBrowserInfo, IHttpWebRequestFactory webRequestFactory)
        {
            string releasesUrl = "https://github.com/mozilla/geckodriver/releases/latest";

            IGitHubClient gitHubClient = new GitHubWebClient(webRequestFactory);
            IRelease      release      = gitHubClient.GetLatestRelease(releasesUrl);

            IReleaseAsset asset = release.Assets.Where(a => a.Name.Contains(GetPlatformOS()))
                                  .FirstOrDefault();

            if (!string.IsNullOrWhiteSpace(asset?.DownloadUrl))
            {
                return(new Uri(asset.DownloadUrl));
            }

            // We weren't able to get information on the latest web driver.

            return(null);
        }
예제 #31
0
 //since we can't release openGL objects in garbage collector threads, we need to send them to the main thread to be released
 public static void ReleaseOnMainThread(IRelease releaseObj)
 {
     mainWindow.releaseQueue.SendAsync(releaseObj);
 }
예제 #32
0
 public ReleaseViewModel(IRelease release)
 {
     this.release = release;
 }
예제 #33
0
 public ReleaseViewModel(IRelease release, IEnumerable<IVersionWork> versions)
 {
     this.release = release;
     this.Versions = versions.Select(v => new VersionViewModel(v));
 }
예제 #34
0
 public void SaveRelease(IRelease release)
 {
     this.entityRepo.SaveRelease(release);
 }
예제 #35
0
 public void DeleteRelease(IRelease release)
 {
     this.entityRepo.DeleteRelease(release);
 }