diff --git a/src/FilterLists.Agent/Extensions/ListInfoExtensions.cs b/src/FilterLists.Agent/Extensions/ListInfoExtensions.cs deleted file mode 100644 index 9b17511b5..000000000 --- a/src/FilterLists.Agent/Extensions/ListInfoExtensions.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using FilterLists.Agent.Core.Entities; - -namespace FilterLists.Agent.Extensions -{ - public static class ListInfoExtensions - { - public static IEnumerable DistributeByHost(this IEnumerable listInfo) - { - return listInfo.GroupBy(l => l.ViewUrl.Host) - .SelectMany((g, gi) => g.Select((l, i) => new {Index = i, GroupIndex = gi, ListInfo = l})) - .OrderBy(a => a.Index) - .ThenBy(a => a.GroupIndex) - .Select(a => a.ListInfo); - } - } -} \ No newline at end of file diff --git a/src/FilterLists.Agent/Extensions/UriExtensions.cs b/src/FilterLists.Agent/Extensions/UriExtensions.cs index d0eee94bd..2ad278c0a 100644 --- a/src/FilterLists.Agent/Extensions/UriExtensions.cs +++ b/src/FilterLists.Agent/Extensions/UriExtensions.cs @@ -1,5 +1,8 @@ using System; +using System.Collections.Generic; using System.IO; +using System.Linq; +using FilterLists.Agent.Core.Entities; namespace FilterLists.Agent.Extensions { @@ -19,5 +22,26 @@ public static bool IsValidUrl(this Uri uri) return false; return tmp.Scheme == Uri.UriSchemeHttp || tmp.Scheme == Uri.UriSchemeHttps; } + + public static IEnumerable DistributeByHost(this IEnumerable listInfo) + { + var listInfoList = listInfo.ToList(); + var distributedLists = listInfoList.Where(u => u.IsValidUrl()) + .GroupBy(u => u.Host) + .SelectMany((g, gi) => g.Select((u, i) => new {Index = i, GroupIndex = gi, ListInfo = u})) + .OrderBy(a => a.Index) + .ThenBy(a => a.GroupIndex) + .Select(a => a.ListInfo); + return listInfoList.Where(u => !u.IsValidUrl()).Concat(distributedLists); + } + + public static IEnumerable DistributeByHost(this IEnumerable listInfo) + { + return listInfo.GroupBy(l => l.ViewUrl.Host) + .SelectMany((g, gi) => g.Select((l, i) => new {Index = i, GroupIndex = gi, ListInfo = l})) + .OrderBy(a => a.Index) + .ThenBy(a => a.GroupIndex) + .Select(a => a.ListInfo); + } } } \ No newline at end of file diff --git a/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs b/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs index a2eae8c90..26e905b06 100644 --- a/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs +++ b/src/FilterLists.Agent/Features/Urls/ValidateUrls.cs @@ -42,7 +42,7 @@ public async Task> Handle(Command request, Cancellatio { var validator = BuildValidator(cancellationToken); var brokenUrls = new List(); - var distinctUrls = request.Urls.Distinct(); + var distinctUrls = request.Urls.Distinct().DistributeByHost(); foreach (var url in distinctUrls) await validator.SendAsync(url, cancellationToken); validator.Complete();