mirror of
https://github.com/MAKS-IT-COM/maksit-postclient.git
synced 2026-09-30 03:18:09 +02:00
(bugfix): main window startup fix
This commit is contained in:
parent
385119e589
commit
817836ab28
@ -6,6 +6,13 @@ The format follows [Keep a Changelog](https://keepachangelog.com/) and [Semantic
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.3.1] - 2026-09-19
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Reinstalling **0.3.0** over **0.3.0** left the old exe in `C:\Program Files\MaksIT\Postclient` (Windows setup skips same-version files). This build is **0.3.1** so the installer replaces it. Uninstall 0.3.0 first if a same-version repair still leaves the 16:08 exe.
|
||||||
|
- The main window opens from the desktop shortcut. Closing it exits the app. The tray icon no longer hides the window on close. A worker process is not started until import or retention needs it.
|
||||||
|
|
||||||
## [0.3.0] - 2026-09-19
|
## [0.3.0] - 2026-09-19
|
||||||
|
|
||||||
Folder stores replace attached Outlook data files, Gmail/Microsoft sign-in goes through Identity Hub, and folders can expire mail on a schedule.
|
Folder stores replace attached Outlook data files, Gmail/Microsoft sign-in goes through Identity Hub, and folders can expire mail on a schedule.
|
||||||
@ -35,7 +42,6 @@ Folder stores replace attached Outlook data files, Gmail/Microsoft sign-in goes
|
|||||||
- Identity Hub Google/Microsoft sign-in now picks up the Hub session after the callback page finishes (the WebView no longer waits for you to close a tab). Save Account then stores the Hub tokens.
|
- Identity Hub Google/Microsoft sign-in now picks up the Hub session after the callback page finishes (the WebView no longer waits for you to close a tab). Save Account then stores the Hub tokens.
|
||||||
- Microsoft Identity Hub sign-in in the embedded WebView: Entra popups no longer replace the Hub page, script polling stays on `identity.maks-it.com`, and login uses a separate WebView2 profile from HTML mail. Sign-in now checks that Hub can issue a mailbox token.
|
- Microsoft Identity Hub sign-in in the embedded WebView: Entra popups no longer replace the Hub page, script polling stays on `identity.maks-it.com`, and login uses a separate WebView2 profile from HTML mail. Sign-in now checks that Hub can issue a mailbox token.
|
||||||
- Identity Hub sign-in opens `identity.maks-it.com` after the WebView adapter is ready (the popup no longer stays on `about:blank`). Google/Microsoft redirects stay in that view; Hub login uses its own WebView2 data folder so it does not clash with HTML mail. The sign-in dialog is owned by Account Settings when that window is open.
|
- Identity Hub sign-in opens `identity.maks-it.com` after the WebView adapter is ready (the popup no longer stays on `about:blank`). Google/Microsoft redirects stay in that view; Hub login uses its own WebView2 data folder so it does not clash with HTML mail. The sign-in dialog is owned by Account Settings when that window is open.
|
||||||
- The main window shows on launch from the installed exe (and the desktop shortcut). A background worker is no longer started before the window is mapped, so the process is not left running with no UI.
|
|
||||||
- Connecting a large Outlook data file no longer freezes the UI: PST open/list/index work runs off the UI thread, catalog walks the store in short chunks, and folder switches show the local archive without waiting on indexing.
|
- Connecting a large Outlook data file no longer freezes the UI: PST open/list/index work runs off the UI thread, catalog walks the store in short chunks, and folder switches show the local archive without waiting on indexing.
|
||||||
- Large Outlook data files keep readable subjects (MS-PST prefix bytes are stripped) and open by the store item id instead of a subject hash. ANSI `.pst` files are copied once to a Unicode `.postclient.pst` beside the original so encoding stays intact.
|
- Large Outlook data files keep readable subjects (MS-PST prefix bytes are stripped) and open by the store item id instead of a subject hash. ANSI `.pst` files are copied once to a Unicode `.postclient.pst` beside the original so encoding stays intact.
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,11 @@
|
|||||||
<display_length compare="ge">768</display_length>
|
<display_length compare="ge">768</display_length>
|
||||||
</requires>
|
</requires>
|
||||||
<releases>
|
<releases>
|
||||||
|
<release version="0.3.1" date="2026-09-19">
|
||||||
|
<description>
|
||||||
|
<p>The main window opens on launch from the Windows setup. Closing the window exits the app.</p>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
<release version="0.3.0" date="2026-09-19">
|
<release version="0.3.0" date="2026-09-19">
|
||||||
<description>
|
<description>
|
||||||
<p>Folder stores replace attached Outlook data files. Gmail and Microsoft sign-in go through Identity Hub. Per-folder retention, multi-select, and IMAP/OAuth reliability fixes.</p>
|
<p>Folder stores replace attached Outlook data files. Gmail and Microsoft sign-in go through Identity Hub. Per-folder retention, multi-select, and IMAP/OAuth reliability fixes.</p>
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Version>0.3.0</Version>
|
<Version>0.3.1</Version>
|
||||||
<Product>Postclient</Product>
|
<Product>Postclient</Product>
|
||||||
<AssemblyTitle>Postclient</AssemblyTitle>
|
<AssemblyTitle>Postclient</AssemblyTitle>
|
||||||
<Authors>Maksym Sadovnychyy</Authors>
|
<Authors>Maksym Sadovnychyy</Authors>
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
using Microsoft.Extensions.Hosting;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Avalonia;
|
using Avalonia;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
|
using Avalonia.Threading;
|
||||||
using Avalonia.Markup.Xaml;
|
using Avalonia.Markup.Xaml;
|
||||||
using Avalonia.Controls.ApplicationLifetimes;
|
using Avalonia.Controls.ApplicationLifetimes;
|
||||||
using MaksIT.PostClient.Client;
|
using MaksIT.PostClient.Client;
|
||||||
@ -14,7 +13,7 @@ namespace MaksIT.PostClient.UI;
|
|||||||
|
|
||||||
|
|
||||||
public partial class App : Application {
|
public partial class App : Application {
|
||||||
private IHost? _host;
|
private ServiceProvider? _services;
|
||||||
|
|
||||||
public override void Initialize() =>
|
public override void Initialize() =>
|
||||||
AvaloniaXamlLoader.Load(this);
|
AvaloniaXamlLoader.Load(this);
|
||||||
@ -28,39 +27,30 @@ public partial class App : Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
base.OnFrameworkInitializationCompleted();
|
base.OnFrameworkInitializationCompleted();
|
||||||
ShowMain();
|
Dispatcher.UIThread.Post(ShowMain, DispatcherPriority.Loaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CompleteStartup() {
|
private void CompleteStartup() {
|
||||||
AppPaths.EnsureDirectories();
|
AppPaths.EnsureDirectories();
|
||||||
_host = Host.CreateDefaultBuilder()
|
var services = new ServiceCollection();
|
||||||
.ConfigureAppConfiguration(builder => {
|
|
||||||
builder.SetBasePath(AppContext.BaseDirectory);
|
|
||||||
builder.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false);
|
|
||||||
builder.AddJsonFile(AppPaths.SettingsFile(), optional: true, reloadOnChange: true);
|
|
||||||
})
|
|
||||||
.ConfigureServices((_, services) => {
|
|
||||||
services.AddSingleton(_ => new ConfigurationFileService());
|
services.AddSingleton(_ => new ConfigurationFileService());
|
||||||
services.AddPostClient();
|
services.AddPostClient();
|
||||||
services.AddSingleton<MainViewModel>();
|
services.AddSingleton<MainViewModel>();
|
||||||
services.AddSingleton<MainWindow>();
|
services.AddSingleton<MainWindow>();
|
||||||
})
|
_services = services.BuildServiceProvider();
|
||||||
.Build();
|
|
||||||
|
|
||||||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) {
|
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) {
|
||||||
desktop.ShutdownMode = ShutdownMode.OnExplicitShutdown;
|
desktop.ShutdownMode = ShutdownMode.OnMainWindowClose;
|
||||||
desktop.MainWindow = _host.Services.GetRequiredService<MainWindow>();
|
desktop.MainWindow = _services.GetRequiredService<MainWindow>();
|
||||||
ShowMain();
|
|
||||||
ApplyTrayCopy();
|
ApplyTrayCopy();
|
||||||
UiLocale.Changed += ApplyTrayCopy;
|
UiLocale.Changed += ApplyTrayCopy;
|
||||||
desktop.ShutdownRequested += async (_, _) => {
|
desktop.ShutdownRequested += async (_, _) => {
|
||||||
if (_host is null)
|
if (_services is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
await _host.Services.GetRequiredService<MainViewModel>().DisposeAsync();
|
await _services.GetRequiredService<MainViewModel>().DisposeAsync();
|
||||||
await _host.StopAsync();
|
await _services.DisposeAsync();
|
||||||
_host.Dispose();
|
_services = null;
|
||||||
_host = null;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -806,14 +806,6 @@ public partial class MainWindow : Window {
|
|||||||
return files.FirstOrDefault()?.TryGetLocalPath();
|
return files.FirstOrDefault()?.TryGetLocalPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnClosing(WindowClosingEventArgs e) {
|
|
||||||
if (e.IsProgrammatic)
|
|
||||||
return;
|
|
||||||
e.Cancel = true;
|
|
||||||
if (IsVisible)
|
|
||||||
Hide();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnExitClick(object? sender, RoutedEventArgs e) {
|
private void OnExitClick(object? sender, RoutedEventArgs e) {
|
||||||
if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime life)
|
if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime life)
|
||||||
life.Shutdown();
|
life.Shutdown();
|
||||||
|
|||||||
@ -20,9 +20,6 @@
|
|||||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.2" />
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.2" />
|
||||||
<PackageReference Include="MaksIT.Core" Version="1.6.9" />
|
<PackageReference Include="MaksIT.Core" Version="1.6.9" />
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.11" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.11" />
|
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.11" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user