Skip to content

Commit

Permalink
Make MainMenuAwaiter public
Browse files Browse the repository at this point in the history
  • Loading branch information
nicoco007 committed Sep 9, 2024
1 parent 10d8e4c commit 3f54f4e
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ private static void Prefix(MainSettingsMenuViewControllersInstaller __instance)
container.Bind<TypeHandler>().To(type).AsSingle();
}

container.Bind(typeof(IInitializable), typeof(IDisposable)).To<MenuInitAwaiter>().AsSingle();
container.Bind(typeof(IInitializable), typeof(IDisposable)).To<MainMenuAwaiter>().AsSingle();

#if DEBUG
container.Bind(typeof(IInitializable)).To<TestPresenter>().AsSingle();
Expand Down
2 changes: 1 addition & 1 deletion BeatSaberMarkupLanguage/Plugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ private async Task LoadAndSetUpFontFallbacksAsync()

Logger.Log.Debug("Waiting for default font presence");

await MenuInitAwaiter.WaitForMainMenuAsync();
await MainMenuAwaiter.WaitForMainMenuAsync();

Logger.Log.Debug("Setting up default font fallbacks");

Expand Down
54 changes: 54 additions & 0 deletions BeatSaberMarkupLanguage/Util/MainMenuAwaiter.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using System;
using System.Linq;
using System.Threading.Tasks;
using Zenject;

namespace BeatSaberMarkupLanguage.Util
{
/// <summary>
/// Contains utilities to wait for the main menu to initialize.
/// </summary>
/// <remarks>If you are using Zenject, you should not need to use this class. Instead, create a class that implements <see cref="IInitializable"/> and bind it to the main menu.</remarks>
public class MainMenuAwaiter : IInitializable, IDisposable
{
private static TaskCompletionSource<VoidResult> taskCompletionSource = new();

/// <summary>
/// Occurs when the main menu is initializing.
/// </summary>
public static event Action MainMenuInitializing;

/// <summary>
/// Waits for the main menu to initialize asynchronously.
/// </summary>
/// <returns>A task that completes when the main menu is initializing.</returns>
public static Task WaitForMainMenuAsync() => taskCompletionSource.Task;

/// <inheritdoc />
public void Initialize()
{
taskCompletionSource.SetResult(default);

if (MainMenuInitializing != null)
{
foreach (Action action in MainMenuInitializing.GetInvocationList().Cast<Action>())
{
try
{
action?.Invoke();
}
catch (Exception ex)
{
Logger.Log.Error($"An exception occurred while invoking {nameof(MainMenuInitializing)}\n{ex}");
}
}
}
}

/// <inheritdoc />
public void Dispose()
{
taskCompletionSource = new();
}
}
}
23 changes: 0 additions & 23 deletions BeatSaberMarkupLanguage/Util/MenuInitAwaiter.cs

This file was deleted.

0 comments on commit 3f54f4e

Please sign in to comment.