Skip to content
Closed
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
105 changes: 87 additions & 18 deletions Flow.Launcher/App.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -21,6 +22,7 @@
using Flow.Launcher.ViewModel;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Stopwatch = Flow.Launcher.Infrastructure.Stopwatch;

namespace Flow.Launcher
Expand All @@ -31,54 +33,121 @@ public partial class App : IDisposable, ISingleInstanceApp
private const string Unique = "Flow.Launcher_Unique_Application_Mutex";
private static bool _disposed;
private readonly Settings _settings;
private readonly IHost _host;

public App()
{
// Initialize settings
WriteToLogFile(1);
var storage = new FlowLauncherJsonStorage<Settings>();
_settings = storage.Load();
_settings.SetStorage(storage);
_settings.WMPInstalled = WindowsMediaPlayerHelper.IsWindowsMediaPlayerInstalled();
WriteToLogFile(2);
try
{
_settings = storage.Load();
}
catch (Exception ex)
{
WriteToLogFile(ex.Message);
}
WriteToLogFile(3);
try
{
_settings.SetStorage(storage);
}
catch (Exception ex)
{
WriteToLogFile(ex.Message);
}
WriteToLogFile(4);
try
{
_settings.WMPInstalled = WindowsMediaPlayerHelper.IsWindowsMediaPlayerInstalled();
}
catch (Exception ex)
{
WriteToLogFile(ex.Message);
}
WriteToLogFile(5);

// Configure the dependency injection container
var host = Host.CreateDefaultBuilder()
.UseContentRoot(AppContext.BaseDirectory)
.ConfigureServices(services => services
.AddSingleton(_ => _settings)
.AddSingleton(sp => new Updater(sp.GetRequiredService<IPublicAPI>(), Launcher.Properties.Settings.Default.GithubRepo))
.AddSingleton<Portable>()
.AddSingleton<SettingWindowViewModel>()
.AddSingleton<IAlphabet, PinyinAlphabet>()
.AddSingleton<StringMatcher>()
.AddSingleton<Internationalization>()
.AddSingleton<IPublicAPI, PublicAPIInstance>()
.AddSingleton<MainViewModel>()
.AddSingleton<Theme>()
).Build();
Ioc.Default.ConfigureServices(host.Services);
try
{
WriteToLogFile($"AppContext.BaseDirectory: {AppContext.BaseDirectory}");
_host = Host.CreateDefaultBuilder()
.UseContentRoot(AppContext.BaseDirectory)
.ConfigureServices(services => services
.AddSingleton(_ => _settings)
.AddSingleton(sp => new Updater(sp.GetRequiredService<IPublicAPI>(), Launcher.Properties.Settings.Default.GithubRepo))
.AddSingleton<Portable>()
.AddSingleton<SettingWindowViewModel>()
.AddSingleton<IAlphabet, PinyinAlphabet>()
.AddSingleton<StringMatcher>()
.AddSingleton<Internationalization>()
.AddSingleton<IPublicAPI, PublicAPIInstance>()
.AddSingleton<MainViewModel>()
.AddSingleton<Theme>()
).Build();
}
catch (Exception ex)
{
WriteToLogFile(ex.Message);
}
WriteToLogFile(6);
try
{
Ioc.Default.ConfigureServices(_host.Services);
}
catch (Exception ex)
{
WriteToLogFile(ex.Message);
}
WriteToLogFile(7);

// Initialize the public API and Settings first
API = Ioc.Default.GetRequiredService<IPublicAPI>();
WriteToLogFile(8);
_settings.Initialize();
WriteToLogFile(9);
}

private static void WriteToLogFile(string message)
{
// d:\LOG.TXT
using var sw = new StreamWriter("d:\\LOG.TXT", true);
sw.WriteLine($" {message} ");
}

private static void WriteToLogFile(int message)
{
// d:\LOG.TXT
using var sw = new StreamWriter("d:\\LOG.TXT", true);
sw.WriteLine($" {message} ");
}

[STAThread]
public static void Main()
{
WriteToLogFile("A");
if (SingleInstance<App>.InitializeAsFirstInstance(Unique))
{
WriteToLogFile("B");
using (var application = new App())
{
WriteToLogFile("C");
application.InitializeComponent();
WriteToLogFile("D");
application.Run();
WriteToLogFile("E");
}
}
}

private async void OnStartupAsync(object sender, StartupEventArgs e)
{
WriteToLogFile(10);
await Stopwatch.NormalAsync("|App.OnStartup|Startup cost", async () =>
{
WriteToLogFile(11);
Ioc.Default.GetRequiredService<Portable>().PreStartCleanUpAfterPortabilityUpdate();

Log.Info("|App.OnStartup|Begin Flow Launcher startup ----------------------------------------------------");
Expand Down
4 changes: 2 additions & 2 deletions Flow.Launcher/Flow.Launcher.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="InputSimulator" Version="1.0.4" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="7.0.0" />
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.106">
<PrivateAssets>all</PrivateAssets>
Expand Down
Loading