Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.0.13-beta
0.0.14-beta
46 changes: 46 additions & 0 deletions apps.Tests/Components/JetBrainsPluginScannerTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System.Net;
using System.Runtime.InteropServices;
using System.Text.Json;

using apps.Components.JetBrains;
using apps.Tests.Fakes;
Expand Down Expand Up @@ -102,6 +104,50 @@ await Assert.That(() => JetBrainsPluginScanner.ParsePluginXml("not xml <"))
.Throws<System.Xml.XmlException>();
}

[Test]
[Arguments(OS.MacOS, Architecture.Arm64, "macOS", "ARM64")]
[Arguments(OS.MacOS, Architecture.X64, "macOS", "X86_64")]
[Arguments(OS.Windows, Architecture.Arm64, "Windows", "ARM64")]
[Arguments(OS.Windows, Architecture.X64, "Windows", "X86_64")]
[Arguments(OS.Windows, Architecture.X86, "Windows", "X86")]
[Arguments(OS.Windows, Architecture.Arm, "Windows", "ARM32")]
[Arguments(OS.Windows, Architecture.Armv6, "Windows", "ARM32")]
[Arguments(OS.None, Architecture.Wasm, "Other", "OTHER")]
public async Task CreateCompatibleUpdateRequest_MapsMarketplacePlatform(
OS operatingSystem,
Architecture architecture,
string expectedOs,
string expectedArchitecture)
{
var request = JetBrainsPluginScanner.CreateCompatibleUpdateRequest(
"RD-262.9437.287",
["com.intellij.platform.daemon"],
operatingSystem,
architecture);

await Assert.That(request.Os).IsEqualTo(expectedOs);
await Assert.That(request.Arch).IsEqualTo(expectedArchitecture);
}

[Test]
public async Task CreateCompatibleUpdateRequest_SerializesPlatformFilters()
{
var request = JetBrainsPluginScanner.CreateCompatibleUpdateRequest(
"RD-262.9437.287",
["com.intellij.platform.daemon"],
OS.MacOS,
Architecture.Arm64);

var json = JsonSerializer.Serialize(request, JetBrainsJsonContext.Default.JetBrainsCompatibleUpdateRequest);
using var document = JsonDocument.Parse(json);
var root = document.RootElement;

await Assert.That(root.GetProperty("build").GetString()).IsEqualTo("RD-262.9437.287");
await Assert.That(root.GetProperty("pluginXMLIds")[0].GetString()).IsEqualTo("com.intellij.platform.daemon");
await Assert.That(root.GetProperty("os").GetString()).IsEqualTo("macOS");
await Assert.That(root.GetProperty("arch").GetString()).IsEqualTo("ARM64");
}

[Test]
public async Task CheckAsync_NumericId_WhenRepoHasNewerVersion_SetsLatestAndUpdateAvailable()
{
Expand Down
3 changes: 2 additions & 1 deletion apps/CheckOrchestrator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,9 @@ public sealed class CheckOrchestrator(IEnumerable<IScanner> scanners, LiveProgre
{
await timerTask.ConfigureAwait(false);
}
catch (OperationCanceledException)
catch (OperationCanceledException) when (timerCts.IsCancellationRequested)
{
logger.LogDebug("Check progress timer cancelled");
}

var updates = checkedApps.Count(c => c.HasUpdate);
Expand Down
6 changes: 6 additions & 0 deletions apps/Components/JetBrains/JetBrainsJsonContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ internal sealed class JetBrainsCompatibleUpdateRequest

[JsonPropertyName("pluginXMLIds")]
public required string[] PluginXmlIds { get; init; }

[JsonPropertyName("os")]
public required string Os { get; init; }

[JsonPropertyName("arch")]
public required string Arch { get; init; }
}

/// <summary>
Expand Down
47 changes: 46 additions & 1 deletion apps/Components/JetBrains/JetBrainsPluginScanner.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System.IO.Compression;
using System.Net.Http.Json;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading.Channels;
using System.Xml;

Expand Down Expand Up @@ -184,7 +185,11 @@ public async IAsyncEnumerable<DiscoveredApp> ScanAsync([EnumeratorCancellation]
try
{
using var client = httpClientFactory.CreateClient("jetbrains");
var request = new JetBrainsCompatibleUpdateRequest { Build = build, PluginXmlIds = xmlIds! };
var request = CreateCompatibleUpdateRequest(
build,
xmlIds!,
GetCurrentOperatingSystem(),
RuntimeInformation.ProcessArchitecture);
using var content = JsonContent.Create(request, JetBrainsJsonContext.Default.JetBrainsCompatibleUpdateRequest);
using var response = await client.PostAsync("/api/search/compatibleUpdates", content, cancellationToken).ConfigureAwait(false);
response.EnsureSuccessStatusCode();
Expand Down Expand Up @@ -443,4 +448,44 @@ internal static (string? Id, string? Name, string? Version, string? DisplayId)?

return (id, name, version, displayId);
}

internal static JetBrainsCompatibleUpdateRequest CreateCompatibleUpdateRequest(
string build,
string[] pluginXmlIds,
OS operatingSystem,
Architecture architecture) =>
new()
{
Build = build,
PluginXmlIds = pluginXmlIds,
Os = operatingSystem switch
{
OS.MacOS => "macOS",
OS.Windows => "Windows",
_ => "Other"
},
Arch = architecture switch
{
Architecture.X86 => "X86",
Architecture.X64 => "X86_64",
Architecture.Arm or Architecture.Armv6 => "ARM32",
Architecture.Arm64 => "ARM64",
_ => "OTHER"
}
};

private static OS GetCurrentOperatingSystem()
{
if (OperatingSystem.IsMacOS())
{
return OS.MacOS;
}

if (OperatingSystem.IsWindows())
{
return OS.Windows;
}

return OS.None;
}
}
3 changes: 2 additions & 1 deletion apps/ScanOrchestrator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ public async Task<Dictionary<string, DiscoveredApp>> ScanAsync(AppKind? kind, Ca
{
await timerTask.ConfigureAwait(false);
}
catch (OperationCanceledException)
catch (OperationCanceledException) when (timerCts.IsCancellationRequested)
{
logger.LogDebug("Scan progress timer cancelled");
}

// Count sub-apps too (e.g. a Homebrew cask channel of a scanned bundle): they are
Expand Down
1 change: 1 addition & 0 deletions apps/apps.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RuntimeFrameworkVersion>10.0.11</RuntimeFrameworkVersion>
<AssemblyName>apps</AssemblyName>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
Expand Down
Loading