From c9cdd4149b2e3febc384384db74bec39c0512e21 Mon Sep 17 00:00:00 2001 From: M-L-Ml Date: Mon, 21 Apr 2025 19:32:00 +0200 Subject: [PATCH] Linq --- src/Models/CommitLink.cs | 48 ++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/Models/CommitLink.cs b/src/Models/CommitLink.cs index ae2cdf85..537612ac 100644 --- a/src/Models/CommitLink.cs +++ b/src/Models/CommitLink.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; namespace SourceGit.Models { @@ -75,32 +76,31 @@ namespace SourceGit.Models baseUrl => $"{baseUrl}/commit/" ) }; - /// - /// translate remotes to CommitLink-s . TODO: rename - /// - /// - /// + + /// + /// Attempts to create a CommitLink for a given remote by matching a provider. + /// + private static CommitLink? TryCreateCommitLink(Remote remote) + { + if (!remote.TryGetVisitURL(out var url)) + return null; + var provider = Providers.FirstOrDefault(p => p.IsMatch(url)); + if (provider.Name == null) + return null; + string repoName = provider.ExtractRepo(url); + return new CommitLink($"{provider.Name} ({repoName})", provider.BuildCommitUrlPrefix(url)); + } + + /// + /// Translates remotes to CommitLinks. TODO: rename + /// public static List Get(List remotes) { - var outs = new List(); - - foreach (var remote in remotes) - { - if (remote.TryGetVisitURL(out var url)) - { - foreach (var provider in Providers) - { - if (provider.IsMatch(url)) - { - string repoName = provider.ExtractRepo(url); - outs.Add(new CommitLink($"{provider.Name} ({repoName})", provider.BuildCommitUrlPrefix(url))); - break; - } - } - } - } - - return outs; + return remotes + .Select(TryCreateCommitLink) + .Where(cl => cl != null) + .Cast() + .ToList(); } } }