Skip to content

Commit 86db6f9

Browse files
committed
Add more code
1 parent ab1963d commit 86db6f9

5 files changed

Lines changed: 71 additions & 24 deletions

File tree

src/UniGetUI.PackageEngine.Managers.Chocolatey/Chocolatey.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public Chocolatey()
6363
OperationHelper = new ChocolateyPkgOperationHelper(this);
6464
}
6565

66-
protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
66+
/*protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
6767
{
6868
Process p = new()
6969
{
@@ -115,7 +115,7 @@ protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
115115
logger.Close(p.ExitCode);
116116
117117
return Packages;
118-
}
118+
}*/
119119

120120
protected override IReadOnlyList<Package> GetInstalledPackages_UnSafe()
121121
{

src/UniGetUI.PackageEngine.Managers.Dotnet/DotNet.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public DotNet()
6666
OperationHelper = new DotNetPkgOperationHelper(this);
6767
}
6868

69-
protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
69+
/*protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
7070
{
7171
var (found, path) = CoreTools.Which("dotnet-tools-outdated.exe");
7272
if (!found)
@@ -153,7 +153,7 @@ protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
153153
logger.Close(p.ExitCode);
154154
155155
return Packages;
156-
}
156+
}*/
157157

158158
protected override IReadOnlyList<Package> GetInstalledPackages_UnSafe()
159159
{

src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGet.cs

Lines changed: 62 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.Web;
44
using UniGetUI.Core.Classes;
55
using UniGetUI.Core.Data;
6+
using UniGetUI.Core.Logging;
67
using UniGetUI.Core.Tools;
78
using UniGetUI.PackageEngine.Enums;
89
using UniGetUI.PackageEngine.Interfaces;
@@ -112,30 +113,75 @@ protected sealed override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
112113
var logger = TaskLogger.CreateNew(LoggableTaskType.ListUpdates);
113114

114115
var installedPackages = TaskRecycler<IReadOnlyList<IPackage>>.RunOrAttach(GetInstalledPackages);
116+
var Packages = new List<Package>();
115117

116-
var packageIds = new StringBuilder();
117-
var packageVers = new StringBuilder();
118-
foreach(var package in installedPackages)
118+
Dictionary<IManagerSource, List<IPackage>> sourceMapping = new();
119+
120+
foreach (var package in installedPackages)
119121
{
120-
packageIds.Append(package.Id + "|");
121-
packageVers.Append(package.VersionString + "|");
122+
var uri = package.Source;
123+
if (!sourceMapping.ContainsKey(uri)) sourceMapping[uri] = new();
124+
sourceMapping[uri].Add(package);
122125
}
123126

124-
var SearchUrl = $"https://www.powershellgallery.com/api/v2/GetUpdates()?" +
125-
$"?packageIds='{HttpUtility.UrlEncode(packageIds.ToString())}'" +
126-
$"&versions='{HttpUtility.UrlEncode(packageVers.ToString())}'" +
127-
$"&includePrerelease=0&includeAllVersions=0";
127+
foreach (var pair in sourceMapping)
128+
{
129+
var packageIds = new StringBuilder();
130+
var packageVers = new StringBuilder();
131+
foreach (var package in pair.Value)
132+
{
133+
packageIds.Append(package.Id + "|");
134+
packageVers.Append(package.VersionString + "|");
135+
}
128136

129-
using HttpClient client = new(CoreData.GenericHttpClientParameters);
130-
client.DefaultRequestHeaders.UserAgent.ParseAdd(CoreData.UserAgentString);
131-
HttpResponseMessage response = client.GetAsync(SearchUrl).GetAwaiter().GetResult();
137+
var SearchUrl = $"{pair.Key.Url.ToString().Trim('/')}/GetUpdates()" +
138+
$"?packageIds=%27{HttpUtility.UrlEncode(packageIds.ToString())}%27" +
139+
$"&versions=%27{HttpUtility.UrlEncode(packageVers.ToString())}%27" +
140+
$"&includePrerelease=0&includeAllVersions=0";
132141

133-
if (!response.IsSuccessStatusCode)
134-
{
135-
logger.Error($"Failed to fetch api at Url={SearchUrl} with status code {response.StatusCode}");
142+
using HttpClient client = new(CoreData.GenericHttpClientParameters);
143+
client.DefaultRequestHeaders.UserAgent.ParseAdd(CoreData.UserAgentString);
144+
HttpResponseMessage response = client.GetAsync(SearchUrl).GetAwaiter().GetResult();
145+
146+
if (!response.IsSuccessStatusCode)
147+
{
148+
logger.Error($"Failed to fetch api at Url={SearchUrl} with status code {response.StatusCode}");
149+
}
150+
else
151+
{
152+
string SearchResults = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
153+
MatchCollection matches = Regex.Matches(SearchResults, "<entry>([\\s\\S]*?)<\\/entry>");
154+
155+
Dictionary<string, SearchResult> AlreadyProcessedPackages = [];
156+
157+
foreach (Match match in matches)
158+
{
159+
if (!match.Success)
160+
{
161+
continue;
162+
}
163+
164+
string id = Regex.Match(match.Value, "<d:Id>'([^</']+)</'").Groups[1].Value;
165+
string version = Regex.Match(match.Value, "<d:Version>'([^</']+)</'").Groups[1].Value;
166+
var float_version = CoreTools.VersionStringToStruct(version);
167+
// Match title = Regex.Match(match.Value, "<title[ \\\"\\=A-Za-z0-9]+>([^<>]+)<\\/title>");
168+
169+
if (AlreadyProcessedPackages.TryGetValue(id, out var value) && value.version_float >= float_version)
170+
{
171+
continue;
172+
}
173+
174+
AlreadyProcessedPackages[id] = new SearchResult { id = id, version = version, version_float = float_version };
175+
}
176+
foreach (SearchResult package in AlreadyProcessedPackages.Values)
177+
{
178+
logger.Log($"Found package {package.id} version {package.version} on source {pair.Key.Name}");
179+
Packages.Add(new Package(CoreTools.FormatAsName(package.id), package.id, package.version, package.version, pair.Key, this));
180+
}
181+
}
136182
}
137183

138-
return installedPackages;
184+
return Packages;
139185
}
140186
}
141187

src/UniGetUI.PackageEngine.Managers.PowerShell/PowerShell.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public PowerShell()
5555
SourcesHelper = new PowerShellSourceHelper(this);
5656
OperationHelper = new PowerShellPkgOperationHelper(this);
5757
}
58-
protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
58+
/*protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
5959
{
6060
Process p = new()
6161
{
@@ -140,7 +140,7 @@ function Test-GalleryModuleUpdate {
140140
logger.Close(p.ExitCode);
141141
142142
return Packages;
143-
}
143+
}*/
144144

145145
protected override IReadOnlyList<Package> GetInstalledPackages_UnSafe()
146146
{

src/UniGetUI.PackageEngine.Managers.PowerShell7/PowerShell7.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public PowerShell7()
5555
SourcesHelper = new PowerShell7SourceHelper(this);
5656
OperationHelper = new PowerShell7PkgOperationHelper(this);
5757
}
58-
protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
58+
59+
/*protected override IReadOnlyList<Package> GetAvailableUpdates_UnSafe()
5960
{
6061
Process p = new()
6162
{
@@ -196,7 +197,7 @@ function Test-GalleryModuleUpdate {
196197
logger.Close(p.ExitCode);
197198
198199
return Packages;
199-
}
200+
}*/
200201

201202
protected override IReadOnlyList<Package> GetInstalledPackages_UnSafe()
202203
{

0 commit comments

Comments
 (0)