nitai/projects
rblxtool / src / ui / RblxTool / Services / AppState.cs
47 lines · 1.1 KB Raw
1using Microsoft.UI.Dispatching;
2using RblxTool.Interop;
3using RblxTool.Models;
4
5namespace RblxTool.Services;
6
7public sealed class AppState
8{
9 private static readonly Lazy<AppState> Instance = new(() => new AppState());
10
11 private AppState()
12 {
13 Engine = RblxEngine.Open();
14 }
15
16 public static AppState Current => Instance.Value;
17
18 public RblxEngine Engine { get; }
19
20 public AccountSummary? Active { get; private set; }
21
22 public event Action? AccountsChanged;
23
24 public IReadOnlyList<AccountSummary> Accounts()
25 {
26 var accounts = Engine.Accounts();
27 Active ??= accounts.FirstOrDefault();
28 return accounts;
29 }
30
31 public void SetActive(AccountSummary account)
32 {
33 if (Engine.Select(account.Id))
34 {
35 Active = account;
36 AccountsChanged?.Invoke();
37 }
38 }
39
40 public void NotifyAccountsChanged()
41 {
42 Active = Engine.Accounts().FirstOrDefault(a => a.Id == Active?.Id) ?? Engine.Accounts().FirstOrDefault();
43 AccountsChanged?.Invoke();
44 }
45
46 public JobRunner CreateRunner(DispatcherQueue dispatcher) => new(Engine, dispatcher);
47}