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
18 changes: 18 additions & 0 deletions src/UniGetUI.Avalonia/Models/PackageCollections.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
/// </summary>
public sealed class PackageWrapper : INotifyPropertyChanged, IDisposable
{
private static readonly HttpClient _iconHttpClient = new(CoreTools.GenericHttpClientParameters)

Check warning on line 26 in src/UniGetUI.Avalonia/Models/PackageCollections.cs

View workflow job for this annotation

GitHub Actions / test-codebase

This call site is reachable on all platforms. 'CoreTools.GenericHttpClientParameters' is only supported on: 'windows' 10.0.19041 and later. (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1416)
{
Timeout = TimeSpan.FromSeconds(8),
};
Expand Down Expand Up @@ -113,7 +113,7 @@
/// See issue #4617 — defense-in-depth signal that an upgrade may be redirecting the
/// download to a different domain than the user originally trusted.
/// </summary>
private void MaybeStartInstallerHostCheck()

Check warning on line 116 in src/UniGetUI.Avalonia/Models/PackageCollections.cs

View workflow job for this annotation

GitHub Actions / Linux (Avalonia)

Member 'MaybeStartInstallerHostCheck' does not access instance data and can be marked as static (https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1822)
{
#if WINDOWS
if (!Package.IsUpgradable) return;
Expand Down Expand Up @@ -201,6 +201,13 @@

if (uri.IsFile)
{
if (!IsSkiaDecodableExtension(uri.LocalPath))
{
// Avalonia's Bitmap (Skia) can't decode SVG/AVIF/ICO/TIFF — the
// icon cache may produce those. Reject upfront so we don't throw.
_iconCache[hash] = null;
return;
}
bitmap = await Task.Run(() => new Bitmap(uri.LocalPath)).ConfigureAwait(false);
}
else if (uri.Scheme is "http" or "https")
Expand All @@ -223,6 +230,17 @@
catch { _iconCache[hash] = null; }
}

private static bool IsSkiaDecodableExtension(string path)
{
string ext = Path.GetExtension(path);
return ext.Equals(".png", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".jpg", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".gif", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".bmp", StringComparison.OrdinalIgnoreCase)
|| ext.Equals(".webp", StringComparison.OrdinalIgnoreCase);
}

private void Package_PropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName == nameof(Package.Tag))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,49 @@
<ProjectReference Include="..\UniGetUI.PackageEngine.PackageManagerClasses\UniGetUI.PackageEngine.Classes.csproj" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.PowerShell\UniGetUI.PackageEngine.Managers.PowerShell.csproj" />
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Scoop\UniGetUI.PackageEngine.Managers.Scoop.csproj" />
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.WinGet\UniGetUI.PackageEngine.Managers.WinGet.csproj" />
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Chocolatey\UniGetUI.PackageEngine.Managers.Chocolatey.csproj" />
<!-- Windows-only managers (only target $(WindowsTargetFramework)). Declared unconditionally on Windows builds
so the project graph sees them; SetTargetFramework pins them to their only TFM regardless of consumer,
and ReferenceOutputAssembly disables the /reference inclusion for the net10.0 inner build. -->
<ItemGroup Condition="'$(BuildSharedWindowsTargetFrameworks)' == 'true'">
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.PowerShell\UniGetUI.PackageEngine.Managers.PowerShell.csproj"
SetTargetFramework="TargetFramework=$(WindowsTargetFramework)">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Scoop\UniGetUI.PackageEngine.Managers.Scoop.csproj"
SetTargetFramework="TargetFramework=$(WindowsTargetFramework)">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.WinGet\UniGetUI.PackageEngine.Managers.WinGet.csproj"
SetTargetFramework="TargetFramework=$(WindowsTargetFramework)">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Chocolatey\UniGetUI.PackageEngine.Managers.Chocolatey.csproj"
SetTargetFramework="TargetFramework=$(WindowsTargetFramework)">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' != '$(WindowsTargetFramework)'">
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Apt\UniGetUI.PackageEngine.Managers.Apt.csproj" />
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Dnf\UniGetUI.PackageEngine.Managers.Dnf.csproj" />
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Pacman\UniGetUI.PackageEngine.Managers.Pacman.csproj" />
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Homebrew\UniGetUI.PackageEngine.Managers.Homebrew.csproj" />
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Snap\UniGetUI.PackageEngine.Managers.Snap.csproj" />
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Flatpak\UniGetUI.PackageEngine.Managers.Flatpak.csproj" />
<!-- Multi-target managers (Linux + Windows TFMs). Declared unconditionally so the graph is correct;
ReferenceOutputAssembly disables the /reference for the Windows inner build. -->
<ItemGroup>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Apt\UniGetUI.PackageEngine.Managers.Apt.csproj">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Dnf\UniGetUI.PackageEngine.Managers.Dnf.csproj">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Pacman\UniGetUI.PackageEngine.Managers.Pacman.csproj">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Homebrew\UniGetUI.PackageEngine.Managers.Homebrew.csproj">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Snap\UniGetUI.PackageEngine.Managers.Snap.csproj">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
<ProjectReference Include="..\UniGetUI.PackageEngine.Managers.Flatpak\UniGetUI.PackageEngine.Managers.Flatpak.csproj">
<ReferenceOutputAssembly Condition="'$(TargetFramework)' == '$(WindowsTargetFramework)'">false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>

<ItemGroup>
Expand All @@ -47,4 +76,4 @@
<ItemGroup>
<PackageReference Include="PhotoSauce.MagicScaler" Version="0.15.0" />
</ItemGroup>
</Project>
</Project>
Loading