Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
24446dc
feat: remove display name from RemoteServer
DexrnZacAttack Aug 23, 2026
7eb30ca
Merge remote-tracking branch 'GitHub/main' into feat/use_server_provi…
DexrnZacAttack Aug 24, 2026
51187df
Merge branch 'main' into feat/use_server_provided_display_names
DexrnZacAttack Aug 24, 2026
e4b2a07
Merge branch 'main' into feat/use_server_provided_display_names
DexrnZacAttack Aug 24, 2026
b4318df
feat!: move remote connection flow to TaskPipeline, add ct to TaskPip…
DexrnZacAttack Aug 24, 2026
fba500d
fix: add CancellationToken to ServerSocket.SendRequestAsync
DexrnZacAttack Aug 24, 2026
8177f5f
feat!: send remote info after client sends software info
DexrnZacAttack Aug 24, 2026
46394b8
feat!: cache remoteinfo
DexrnZacAttack Aug 24, 2026
1c01a19
wip!: move to new DirectoryKeyValueStorage for remotes, store cache i…
DexrnZacAttack Aug 25, 2026
34a73c7
feat!: switch `IDirectoryManager.EnumerateFilesAsync` to `IDirectoryM…
DexrnZacAttack Aug 25, 2026
39480a0
feat!: refactor UniScanClient into DI object, display RemoteInfo in UI
DexrnZacAttack Aug 26, 2026
eb43378
feat!: announcements page, some bug fixes
DexrnZacAttack Aug 27, 2026
7d43c17
feat: improve disconnectedremotepageview and notconnectedremotepageview
DexrnZacAttack Aug 27, 2026
2ff1268
feat: more ui improvements
DexrnZacAttack Aug 27, 2026
b69abef
feat: improve DeviceListView
DexrnZacAttack Aug 27, 2026
f562fab
style!: restructure views and viewmodels
DexrnZacAttack Aug 27, 2026
82787d1
fix: commit uniscanapp
DexrnZacAttack Aug 27, 2026
a2134ed
ci: try to fix web build race condition
DexrnZacAttack Aug 27, 2026
4176d1e
ci: stop fuck you just build web singlethreaded I don't care
DexrnZacAttack Aug 27, 2026
d39acd5
fix: exclude tcp stuff on browser
DexrnZacAttack Aug 27, 2026
7fe6adc
ci: only attempt to deploy web when doing something on main branch
DexrnZacAttack Aug 27, 2026
0bed995
fix: fix loading on android since I guess GetEntryAssembly() doesn't …
DexrnZacAttack Aug 28, 2026
5b07f1f
feat: consistency changes, bump versions, fix <Company />
DexrnZacAttack Aug 28, 2026
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
5 changes: 4 additions & 1 deletion .github/workflows/publish-web.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ jobs:
run: >
dotnet publish ${{github.workspace}}/Client/UniScan.Client.App.Platform.Browser
-c Release
-o ${{steps.strings.outputs.build-output-dir}}
-o ${{steps.strings.outputs.build-output-dir}}
/nr:false
/m:1

- name: Upload Artifact
uses: actions/upload-pages-artifact@v5
Expand All @@ -50,6 +52,7 @@ jobs:
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build-client-web
if: github.ref == 'refs/heads/main'
permissions:
id-token: write
pages: write
Expand Down
85 changes: 44 additions & 41 deletions Client/Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -1,44 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<!-- https://learn.microsoft.com/en-us/nuget/consume-packages/central-package-management -->
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<!-- Avalonia packages -->
<!-- Important: keep version in sync! -->
<PackageVersion Include="Avalonia" Version="12.1.1"/>
<PackageVersion Include="Avalonia.Browser.Blazor" Version="11.3.20"/>
<PackageVersion Include="Avalonia.Labs.Controls" Version="12.0.2"/>
<PackageVersion Include="Avalonia.Themes.Fluent" Version="12.1.1"/>
<PackageVersion Include="Avalonia.Fonts.Inter" Version="12.1.1"/>
<PackageVersion Include="AvaloniaUI.DiagnosticsSupport" Version="2.2.3"/>
<PackageVersion Include="Avalonia.Desktop" Version="12.1.1"/>
<PackageVersion Include="Avalonia.iOS" Version="12.1.1"/>
<PackageVersion Include="Avalonia.Browser" Version="12.1.1"/>
<PackageVersion Include="Avalonia.Android" Version="12.1.1"/>
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2"/>
<PackageVersion Include="DialogHost.Avalonia" Version="0.12.3"/>
<PackageVersion Include="DotNetty.Common" Version="0.7.6"/>
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.11"/>
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11"/>
<PackageVersion Include="ObservableCollections.R3" Version="3.3.4"/>
<PackageVersion Include="R3" Version="1.3.1"/>
<PackageVersion Include="Serilog.Extensions.Logging" Version="10.0.0"/>
<PackageVersion Include="Serilog.Sinks.Avalonia.Browser" Version="2.0.0"/>
<PackageVersion Include="Serilog.Sinks.File" Version="7.0.0"/>
<PackageVersion Include="SpawnDev.SpawnJS" Version="2.1.8"/>
<PackageVersion Include="SpawnDev.SpawnJS.WebWorkers" Version="2.1.8"/>
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.2.0.3"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Common" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Common.Jvm" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData.Core" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Process" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Runtime" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Runtime.Android" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModel" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModel.Android" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModelSavedState" Version="2.11.0.1"/>
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModelSavedState.Android" Version="2.11.0.1"/>
</ItemGroup>
<!-- https://learn.microsoft.com/en-us/nuget/consume-packages/central-package-management -->
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<!-- Avalonia packages -->
<!-- Important: keep version in sync! -->
<PackageVersion Include="AsyncImageLoader.Avalonia" Version="3.8.0" />
<PackageVersion Include="Avalonia" Version="12.1.1" />
<PackageVersion Include="Avalonia.Browser.Blazor" Version="11.3.20" />
<PackageVersion Include="Avalonia.Controls.ItemsRepeater" Version="12.0.0" />
<PackageVersion Include="Avalonia.Labs.Controls" Version="12.0.2" />
<PackageVersion Include="Avalonia.Themes.Fluent" Version="12.1.1" />
<PackageVersion Include="Avalonia.Fonts.Inter" Version="12.1.1" />
<PackageVersion Include="AvaloniaUI.DiagnosticsSupport" Version="2.2.3" />
<PackageVersion Include="Avalonia.Desktop" Version="12.1.1" />
<PackageVersion Include="Avalonia.iOS" Version="12.1.1" />
<PackageVersion Include="Avalonia.Browser" Version="12.1.1" />
<PackageVersion Include="Avalonia.Android" Version="12.1.1" />
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.2" />
<PackageVersion Include="DialogHost.Avalonia" Version="0.12.3" />
<PackageVersion Include="DotNetty.Common" Version="0.7.6" />
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.11" />
<PackageVersion Include="ObservableCollections.R3" Version="3.3.4" />
<PackageVersion Include="R3" Version="1.3.1" />
<PackageVersion Include="Serilog.Extensions.Logging" Version="10.0.0" />
<PackageVersion Include="Serilog.Sinks.Avalonia.Browser" Version="2.0.0" />
<PackageVersion Include="Serilog.Sinks.File" Version="7.0.0" />
<PackageVersion Include="SpawnDev.SpawnJS" Version="2.1.8" />
<PackageVersion Include="SpawnDev.SpawnJS.WebWorkers" Version="2.1.8" />
<PackageVersion Include="Xamarin.AndroidX.Core.SplashScreen" Version="1.2.0.3" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Common" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Common.Jvm" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.LiveData.Core" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Process" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Runtime" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.Runtime.Android" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModel" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModel.Android" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModelSavedState" Version="2.11.0.1" />
<PackageVersion Include="Xamarin.AndroidX.Lifecycle.ViewModelSavedState.Android" Version="2.11.0.1" />
</ItemGroup>
</Project>
2 changes: 2 additions & 0 deletions Client/UniScan.Client.App.Platform.Android/AndroidPaths.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,6 @@ public class AndroidPaths : IPlatformStandardPaths
public string DataPath => Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

public string ConfigPath => Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

public string CachePath => Path.Combine(DataPath, ".cache");
}
3 changes: 3 additions & 0 deletions Client/UniScan.Client.App.Platform.Android/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
using UniScan.Client.App.Core.Platform;

[assembly: UniScanPlatform]
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
<ApplicationDisplayVersion>1.0</ApplicationDisplayVersion>
<AndroidPackageFormat>apk</AndroidPackageFormat>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
<Company>UniScan</Company>
<Company>UniScanProject</Company>
<Product>UniScan Android</Product>
<AssemblyVersion>0.0.2</AssemblyVersion>
<FileVersion>0.0.2</FileVersion>
<AssemblyVersion>0.0.3</AssemblyVersion>
<FileVersion>0.0.3</FileVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
3 changes: 3 additions & 0 deletions Client/UniScan.Client.App.Platform.Browser/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
using UniScan.Client.App.Core.Platform;

[assembly: UniScanPlatform]
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
namespace UniScan.Platform.Implementations.Web;
using UniScan.Platform;

namespace UniScan.Client.App.Platform.Browser;

public class BrowserPaths : IPlatformStandardPaths
{
public string DataPath => "data";
public string ConfigPath => "config";
public string CachePath => "cache";
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
<RepositoryUrl>https://github.com/UniScanProject/UniScan</RepositoryUrl>
<Company>UniScanProject</Company>
<Product>UniScan Web</Product>
<AssemblyVersion>0.1.1</AssemblyVersion>
<FileVersion>0.1.1</FileVersion>
<AssemblyVersion>0.1.2</AssemblyVersion>
<FileVersion>0.1.2</FileVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
3 changes: 3 additions & 0 deletions Client/UniScan.Client.App.Platform.Desktop/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
using UniScan.Client.App.Core.Platform;

[assembly: UniScanPlatform]
4 changes: 4 additions & 0 deletions Client/UniScan.Client.App.Platform.Desktop/DesktopPaths.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@ public class DesktopPaths : IPlatformStandardPaths

public string ConfigPath => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"UniScan");

public string CachePath => OperatingSystem.IsLinux() ?
Path.Combine(Environment.GetEnvironmentVariable("XDG_CACHE_HOME") ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".cache"), "UniScan")
: Path.Combine(DataPath, "cache");
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
See https://docs.avaloniaui.net/docs/guides/platforms/platform-specific-code/dotnet for more details.-->
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<Company>UniScan</Company>
<Company>UniScanProject</Company>
<Product>UniScan Desktop</Product>
<AssemblyVersion>0.0.2</AssemblyVersion>
<FileVersion>0.0.2</FileVersion>
<AssemblyVersion>0.0.3</AssemblyVersion>
<FileVersion>0.0.3</FileVersion>
</PropertyGroup>

<PropertyGroup>
Expand Down

This file was deleted.

15 changes: 0 additions & 15 deletions Client/UniScan.Client.App/Core/Pipeline/ITaskContext.cs

This file was deleted.

13 changes: 0 additions & 13 deletions Client/UniScan.Client.App/Core/Pipeline/ITaskStage.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using UniScan.Client.App.Views;
using UniScan.Client.App.Views.Settings;
using UniScan.Client.Core.Remote;
using UniScan.Network;
using UniScan.Network.Registry.Source.Sources;
using MainViewModel = UniScan.Client.App.Views.MainViewModel;

namespace UniScan.Client.App.Core.Pipeline.Initialization;

public partial class UniScanAppInitializationPipeline
{
internal static async Task InitializeViews(TaskContexts.PostClient ctx, CancellationToken ct = default)
{
ctx.Status.Value = "Initializing UI";

ctx.ServiceCollection.AddSingleton<MainView>();
ctx.ServiceCollection.AddSingleton<MainViewModel>();

ctx.ServiceCollection.AddSingleton<ClientSettingsViewModel>();
}

internal static async Task InitializeServiceProvider(TaskContexts.PreServiceProvider ctx, CancellationToken ct = default)
{
ctx.Status.Value = "Building ServiceProvider";

ctx.Services = ctx.ServiceCollection.BuildServiceProvider();
}

internal static async Task InitializeRemotes(TaskContexts.PostServiceProvider ctx, CancellationToken ct = default)
{
ctx.Status.Value = "Loading remotes";

IRemoteStorage remoteStorage = ctx.Services.GetRequiredService<IRemoteStorage>();
await remoteStorage.LoadAsync();
}

internal Task RegisterPackets(UniScanAppInitializationPipeline.TaskContexts.PostServiceProvider ctx,
CancellationToken ct = default)
{
ctx.Status.Value = "Registering packets";

PacketRegistry registry = ctx.Services.GetRequiredService<PacketRegistry>();
registry.RegisterFromSource<AssembliesPacketSource>();

return Task.CompletedTask;
}
}
Loading
Loading