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
54 changes: 53 additions & 1 deletion .github/workflows/build-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -308,10 +308,62 @@ jobs:
run: |
Remove-Item "unigetui_bin" -Recurse -Force -ErrorAction SilentlyContinue

build-avalonia:
name: Build Avalonia (${{ matrix.platform }})
runs-on: macos-latest
needs: [preflight]
environment: ${{ needs.preflight.outputs.package-env }}
permissions:
contents: read
env:
UNIGETUI_GITHUB_CLIENT_ID: ${{ secrets.UNIGETUI_GITHUB_CLIENT_ID }}
UNIGETUI_GITHUB_CLIENT_SECRET: ${{ secrets.UNIGETUI_GITHUB_CLIENT_SECRET }}
NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages
strategy:
fail-fast: false
matrix:
platform: [arm64, x64]

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Install .NET
uses: actions/setup-dotnet@v5
with:
global-json-file: global.json

- name: Cache NuGet packages
uses: actions/cache@v5
with:
path: ${{ env.NUGET_PACKAGES }}
key: ${{ runner.os }}-nuget-${{ hashFiles('global.json', 'src/**/*.csproj', 'src/**/*.props', 'src/**/*.targets', 'src/**/*.sln') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Restore dependencies
working-directory: src
run: dotnet restore UniGetUI.Avalonia/UniGetUI.Avalonia.csproj

- name: Publish
working-directory: src
run: |
dotnet publish UniGetUI.Avalonia/UniGetUI.Avalonia.csproj \
--configuration Release \
--runtime osx-${{ matrix.platform }} \
--self-contained true \
--output ../avalonia_bin/${{ matrix.platform }}

- name: Upload artifacts
uses: actions/upload-artifact@v7
with:
name: UniGetUI-Avalonia-${{ matrix.platform }}
path: avalonia_bin/${{ matrix.platform }}/*

publish:
name: Publish GitHub Release
runs-on: ubuntu-latest
needs: [preflight, build]
needs: [preflight, build, build-avalonia]
if: ${{ fromJSON(needs.preflight.outputs.skip-publish) == false }}
environment: ${{ needs.preflight.outputs.package-env }}
permissions:
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ src/UniGetUI/choco-cli/extensions/chocolatey-dotnetfx/

*.user
/src/UniGetUI/Generated Files
/src/UniGetUI.Avalonia/Infrastructure/Generated Files
/InstallerExtras/MsiCreator/.vs/MsiInstallerWrapper/CopilotIndices
/InstallerExtras/MsiCreator/.vs
InstallerExtras/MsiCreator/setup.exe
Expand All @@ -93,3 +94,4 @@ src/UniGetUI.v3.ncrunchsolution

# macOS Finder metadata
.DS_Store
/src/UniGetUI.Avalonia/Generated Files
19 changes: 19 additions & 0 deletions src/UniGetUI.Avalonia/.vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"configurations": [
{
"name": "UniGetUI.Avalonia (Debug)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build UniGetUI.Avalonia (Debug)",
"program": "${workspaceFolder}/bin/arm64/Debug/net10.0/UniGetUI.Avalonia",
"args": [],
"cwd": "${workspaceFolder}/bin/arm64/Debug/net10.0/",
"console": "integratedTerminal",
"stopAtEntry": false,
"env": {
"UNIGETUI_GITHUB_CLIENT_ID": "",
"UNIGETUI_GITHUB_CLIENT_SECRET": ""
}
}
]
}
30 changes: 11 additions & 19 deletions src/UniGetUI.Avalonia/App.axaml.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
using System.Diagnostics;
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Data.Core.Plugins;
using Avalonia.Markup.Xaml;
using Avalonia.Markup.Xaml.Styling;
using Avalonia.Platform;
using Avalonia.Styling;
using UniGetUI.Avalonia.Infrastructure;
using UniGetUI.Avalonia.Views;
using UniGetUI.PackageEngine;
using CoreSettings = global::UniGetUI.Core.SettingsEngine.Settings;
Expand All @@ -16,6 +17,9 @@ public partial class App : Application
public override void Initialize()
{
AvaloniaXamlLoader.Load(this);
#if AVALONIA_DIAGNOSTICS_ENABLED
this.AttachDeveloperTools();
#endif

string platform = OperatingSystem.IsWindows() ? "Windows"
: OperatingSystem.IsMacOS() ? "macOS"
Expand All @@ -31,17 +35,17 @@ public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
// Avoid duplicate validations from both Avalonia and the CommunityToolkit.
// More info: https://docs.avaloniaui.net/docs/guides/development-guides/data-validation#manage-validationplugins
DisableAvaloniaDataAnnotationValidation();
if (OperatingSystem.IsMacOS())
{
ExpandMacOSPath();
using var stream = AssetLoader.Open(new Uri("avares://UniGetUI.Avalonia/Assets/icon.png"));
using var ms = new MemoryStream();
stream.CopyTo(ms);
MacOsNotificationBridge.SetDockIcon(ms.ToArray());
}
PEInterface.LoadLoaders();
ApplyTheme(CoreSettings.GetValue(CoreSettings.K.PreferredTheme));
var mainWindow = new MainWindow();
#if DEBUG
mainWindow.AttachDevTools();
#endif
desktop.MainWindow = mainWindow;
_ = Task.Run(PEInterface.LoadManagers);
}
Expand Down Expand Up @@ -86,16 +90,4 @@ public static void ApplyTheme(string value)
};
}

private static void DisableAvaloniaDataAnnotationValidation()
{
// Get an array of plugins to remove
var dataValidationPluginsToRemove =
BindingPlugins.DataValidators.OfType<DataAnnotationsValidationPlugin>().ToArray();

// remove each entry found
foreach (var plugin in dataValidationPluginsToRemove)
{
BindingPlugins.DataValidators.Remove(plugin);
}
}
}
7 changes: 7 additions & 0 deletions src/UniGetUI.Avalonia/Assets/Styles/Styles.Common.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@
<Setter Property="Margin" Value="40,4,40,0"/>
</Style>

<!-- Hyperlink-style text (blue accent, underline) -->
<Style Selector="TextBlock.hyperlink">
<Setter Property="Foreground" Value="{DynamicResource SystemControlHighlightAccentBrush}"/>
<Setter Property="TextDecorations" Value="Underline"/>
<Setter Property="Cursor" Value="Hand"/>
</Style>

<!-- SvgIcon: inherit the Fluent foreground so icons match text colour in both themes -->
<Style Selector="controls|SvgIcon">
<Setter Property="Foreground" Value="{DynamicResource SystemControlForegroundBaseHighBrush}"/>
Expand Down
20 changes: 20 additions & 0 deletions src/UniGetUI.Avalonia/Assets/Styles/Styles.Linux.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,16 @@
<SolidColorBrush x:Key="WarningBannerIconBackground" Color="#f0a500"/>
<SolidColorBrush x:Key="WarningBannerIconForeground" Color="#1a1000"/>
<SolidColorBrush x:Key="WarningBannerSubtext" Color="#ffe082"/>
<!-- Status banners (success / error / info) -->
<SolidColorBrush x:Key="StatusSuccessBackground" Color="#1a3d1a"/>
<SolidColorBrush x:Key="StatusSuccessBorderBrush" Color="#2e6b2e"/>
<SolidColorBrush x:Key="StatusSuccessForeground" Color="#66bb6a"/>
<SolidColorBrush x:Key="StatusErrorBackground" Color="#3d1a1a"/>
<SolidColorBrush x:Key="StatusErrorBorderBrush" Color="#6b2e2e"/>
<SolidColorBrush x:Key="StatusErrorForeground" Color="#ef9a9a"/>
<SolidColorBrush x:Key="StatusWarningForeground" Color="#ffe082"/>
<SolidColorBrush x:Key="StatusInfoBackground" Color="#1a2035"/>
<SolidColorBrush x:Key="StatusInfoBorderBrush" Color="#2e3a60"/>
<!-- Setting warning subtext -->
<SolidColorBrush x:Key="SettingWarningTextForeground" Color="#ffc107"/>
</ResourceDictionary>
Expand All @@ -52,6 +62,16 @@
<SolidColorBrush x:Key="WarningBannerIconBackground" Color="#f0a500"/>
<SolidColorBrush x:Key="WarningBannerIconForeground" Color="#1a1000"/>
<SolidColorBrush x:Key="WarningBannerSubtext" Color="#7a4f00"/>
<!-- Status banners (success / error / info) -->
<SolidColorBrush x:Key="StatusSuccessBackground" Color="#e8f5e9"/>
<SolidColorBrush x:Key="StatusSuccessBorderBrush" Color="#4caf50"/>
<SolidColorBrush x:Key="StatusSuccessForeground" Color="#2e7d32"/>
<SolidColorBrush x:Key="StatusErrorBackground" Color="#ffebee"/>
<SolidColorBrush x:Key="StatusErrorBorderBrush" Color="#f44336"/>
<SolidColorBrush x:Key="StatusErrorForeground" Color="#c62828"/>
<SolidColorBrush x:Key="StatusWarningForeground" Color="#7a4f00"/>
<SolidColorBrush x:Key="StatusInfoBackground" Color="#e3f2fd"/>
<SolidColorBrush x:Key="StatusInfoBorderBrush" Color="#1976d2"/>
<!-- Setting warning subtext -->
<SolidColorBrush x:Key="SettingWarningTextForeground" Color="#a05c00"/>
</ResourceDictionary>
Expand Down
22 changes: 22 additions & 0 deletions src/UniGetUI.Avalonia/Assets/Styles/Styles.Windows.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,17 @@
<SolidColorBrush x:Key="WarningBannerIconBackground" Color="#f0a500"/>
<SolidColorBrush x:Key="WarningBannerIconForeground" Color="#1a1000"/>
<SolidColorBrush x:Key="WarningBannerSubtext" Color="#ffe082"/>
<!-- Status banners (success / error / info) -->
<SolidColorBrush x:Key="StatusSuccessBackground" Color="#1a3d1a"/>
<SolidColorBrush x:Key="StatusSuccessBorderBrush" Color="#2e6b2e"/>
<SolidColorBrush x:Key="StatusErrorBackground" Color="#3d1a1a"/>
<SolidColorBrush x:Key="StatusErrorBorderBrush" Color="#6b2e2e"/>
<SolidColorBrush x:Key="StatusInfoBackground" Color="#1a2035"/>
<SolidColorBrush x:Key="StatusInfoBorderBrush" Color="#2e3a60"/>
<!-- Status badge foreground -->
<SolidColorBrush x:Key="StatusSuccessForeground" Color="#66bb6a"/>
<SolidColorBrush x:Key="StatusWarningForeground" Color="#ffe082"/>
<SolidColorBrush x:Key="StatusErrorForeground" Color="#ef9a9a"/>
<!-- Setting warning subtext -->
<SolidColorBrush x:Key="SettingWarningTextForeground" Color="#ffc107"/>
</ResourceDictionary>
Expand All @@ -52,6 +63,17 @@
<SolidColorBrush x:Key="WarningBannerIconBackground" Color="#f0a500"/>
<SolidColorBrush x:Key="WarningBannerIconForeground" Color="#1a1000"/>
<SolidColorBrush x:Key="WarningBannerSubtext" Color="#7a4f00"/>
<!-- Status banners (success / error / info) -->
<SolidColorBrush x:Key="StatusSuccessBackground" Color="#e8f5e9"/>
<SolidColorBrush x:Key="StatusSuccessBorderBrush" Color="#4caf50"/>
<SolidColorBrush x:Key="StatusErrorBackground" Color="#ffebee"/>
<SolidColorBrush x:Key="StatusErrorBorderBrush" Color="#f44336"/>
<SolidColorBrush x:Key="StatusInfoBackground" Color="#e3f2fd"/>
<SolidColorBrush x:Key="StatusInfoBorderBrush" Color="#1976d2"/>
<!-- Status badge foreground -->
<SolidColorBrush x:Key="StatusSuccessForeground" Color="#2e7d32"/>
<SolidColorBrush x:Key="StatusWarningForeground" Color="#7a4f00"/>
<SolidColorBrush x:Key="StatusErrorForeground" Color="#c62828"/>
<!-- Setting warning subtext -->
<SolidColorBrush x:Key="SettingWarningTextForeground" Color="#a05c00"/>
</ResourceDictionary>
Expand Down
22 changes: 22 additions & 0 deletions src/UniGetUI.Avalonia/Assets/Styles/Styles.macOS.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,17 @@
<SolidColorBrush x:Key="WarningBannerIconBackground" Color="#f0a500"/>
<SolidColorBrush x:Key="WarningBannerIconForeground" Color="#1a1000"/>
<SolidColorBrush x:Key="WarningBannerSubtext" Color="#ffe082"/>
<!-- Status banners (success / error / info) -->
<SolidColorBrush x:Key="StatusSuccessBackground" Color="#1a3d1a"/>
<SolidColorBrush x:Key="StatusSuccessBorderBrush" Color="#2e6b2e"/>
<SolidColorBrush x:Key="StatusErrorBackground" Color="#3d1a1a"/>
<SolidColorBrush x:Key="StatusErrorBorderBrush" Color="#6b2e2e"/>
<SolidColorBrush x:Key="StatusInfoBackground" Color="#1a2035"/>
<SolidColorBrush x:Key="StatusInfoBorderBrush" Color="#2e3a60"/>
<!-- Status badge foreground -->
<SolidColorBrush x:Key="StatusSuccessForeground" Color="#66bb6a"/>
<SolidColorBrush x:Key="StatusWarningForeground" Color="#ffe082"/>
<SolidColorBrush x:Key="StatusErrorForeground" Color="#ef9a9a"/>
<!-- Setting warning subtext -->
<SolidColorBrush x:Key="SettingWarningTextForeground" Color="#ffc107"/>
</ResourceDictionary>
Expand All @@ -52,6 +63,17 @@
<SolidColorBrush x:Key="WarningBannerIconBackground" Color="#f0a500"/>
<SolidColorBrush x:Key="WarningBannerIconForeground" Color="#1a1000"/>
<SolidColorBrush x:Key="WarningBannerSubtext" Color="#7a4f00"/>
<!-- Status banners (success / error / info) -->
<SolidColorBrush x:Key="StatusSuccessBackground" Color="#e8f5e9"/>
<SolidColorBrush x:Key="StatusSuccessBorderBrush" Color="#4caf50"/>
<SolidColorBrush x:Key="StatusErrorBackground" Color="#ffebee"/>
<SolidColorBrush x:Key="StatusErrorBorderBrush" Color="#f44336"/>
<SolidColorBrush x:Key="StatusInfoBackground" Color="#e3f2fd"/>
<SolidColorBrush x:Key="StatusInfoBorderBrush" Color="#1976d2"/>
<!-- Status badge foreground -->
<SolidColorBrush x:Key="StatusSuccessForeground" Color="#2e7d32"/>
<SolidColorBrush x:Key="StatusWarningForeground" Color="#7a4f00"/>
<SolidColorBrush x:Key="StatusErrorForeground" Color="#c62828"/>
<!-- Setting warning subtext -->
<SolidColorBrush x:Key="SettingWarningTextForeground" Color="#a05c00"/>
</ResourceDictionary>
Expand Down
7 changes: 2 additions & 5 deletions src/UniGetUI.Avalonia/Infrastructure/AvaloniaBootstrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ private static async Task InitializeBackgroundApiAsync()
_backgroundApi.OnOpenUpdatesPage += (_, _) =>
Dispatcher.UIThread.Post(() =>
{
MainWindow.Instance?.NavigateShell(ShellPageType.Updates);
MainWindow.Instance?.Navigate(PageType.Updates);
MainWindow.Instance?.ShowFromTray();
});

Expand All @@ -110,10 +110,7 @@ private static async Task InitializeBackgroundApiAsync()
{
Logger.Info($"BackgroundApi: ShowSharedPackage {pkg.Key}/{pkg.Value}");
MainWindow.Instance?.ShowFromTray();
if (MainWindow.Instance?.Content is Views.MainShellView shell)
{
shell.OpenSharedPackage(pkg.Key, pkg.Value);
}
MainWindow.Instance?.OpenSharedPackage(pkg.Key, pkg.Value);
});

_backgroundApi.OnUpgradeAll += (_, _) =>
Expand Down
Loading
Loading