205 lines
14 KiB
C#
205 lines
14 KiB
C#
using Dalamud.Game.ClientState.Objects;
|
|
using Dalamud.Interface.ImGuiFileDialog;
|
|
using Dalamud.Interface.Windowing;
|
|
using Dalamud.Plugin;
|
|
using Dalamud.Plugin.Services;
|
|
using MareSynchronos.FileCache;
|
|
using MareSynchronos.Interop;
|
|
using MareSynchronos.Interop.Ipc;
|
|
using MareSynchronos.MareConfiguration;
|
|
using MareSynchronos.PlayerData.Export;
|
|
using MareSynchronos.PlayerData.Factories;
|
|
using MareSynchronos.PlayerData.Pairs;
|
|
using MareSynchronos.PlayerData.Services;
|
|
using MareSynchronos.Services;
|
|
using MareSynchronos.Services.Events;
|
|
using MareSynchronos.Services.Mediator;
|
|
using MareSynchronos.Services.ServerConfiguration;
|
|
using MareSynchronos.UI;
|
|
using MareSynchronos.UI.Components;
|
|
using MareSynchronos.UI.Components.Popup;
|
|
using MareSynchronos.UI.Handlers;
|
|
using MareSynchronos.WebAPI;
|
|
using MareSynchronos.WebAPI.Files;
|
|
using MareSynchronos.WebAPI.SignalR;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
using MareSynchronos;
|
|
|
|
namespace LoporritSync;
|
|
|
|
public sealed class Plugin : IDalamudPlugin
|
|
{
|
|
private readonly IHost _host;
|
|
|
|
public static Plugin Self;
|
|
public Action<IFramework>? _realOnFrameworkUpdate { get; set; }
|
|
|
|
// Proxy function in the LoporritSync namespace to avoid confusion in /xlstats
|
|
public void OnFrameworkUpdate(IFramework framework)
|
|
{
|
|
_realOnFrameworkUpdate?.Invoke(framework);
|
|
}
|
|
|
|
public Plugin(IDalamudPluginInterface pluginInterface, ICommandManager commandManager, IDataManager gameData,
|
|
IFramework framework, IObjectTable objectTable, IClientState clientState, ICondition condition, IChatGui chatGui,
|
|
IGameGui gameGui, IDtrBar dtrBar, IToastGui toastGui, IPluginLog pluginLog, ITargetManager targetManager, INotificationManager notificationManager,
|
|
ITextureProvider textureProvider, IContextMenu contextMenu, IGameInteropProvider gameInteropProvider,
|
|
INamePlateGui namePlateGui, IGameConfig gameConfig, IPartyList partyList)
|
|
{
|
|
Plugin.Self = this;
|
|
_host = new HostBuilder()
|
|
.UseContentRoot(pluginInterface.ConfigDirectory.FullName)
|
|
.ConfigureLogging(lb =>
|
|
{
|
|
lb.ClearProviders();
|
|
lb.AddDalamudLogging(pluginLog);
|
|
lb.SetMinimumLevel(LogLevel.Trace);
|
|
})
|
|
.ConfigureServices(collection =>
|
|
{
|
|
collection.AddSingleton(new WindowSystem("MareSynchronos"));
|
|
collection.AddSingleton<FileDialogManager>();
|
|
collection.AddSingleton(new Dalamud.Localization("MareSynchronos.Localization.", "", useEmbedded: true));
|
|
|
|
// add mare related singletons
|
|
collection.AddSingleton<MareMediator>();
|
|
collection.AddSingleton<FileCacheManager>();
|
|
collection.AddSingleton<ServerConfigurationManager>();
|
|
collection.AddSingleton<ApiController>();
|
|
collection.AddSingleton<MareCharaFileManager>();
|
|
collection.AddSingleton<PerformanceCollectorService>();
|
|
collection.AddSingleton<HubFactory>();
|
|
collection.AddSingleton<FileUploadManager>();
|
|
collection.AddSingleton<FileTransferOrchestrator>();
|
|
collection.AddSingleton<MarePlugin>();
|
|
collection.AddSingleton<MareProfileManager>();
|
|
collection.AddSingleton<GameObjectHandlerFactory>();
|
|
collection.AddSingleton<FileDownloadManagerFactory>();
|
|
collection.AddSingleton<PairHandlerFactory>();
|
|
collection.AddSingleton<PairAnalyzerFactory>();
|
|
collection.AddSingleton<PairFactory>();
|
|
collection.AddSingleton<XivDataAnalyzer>();
|
|
collection.AddSingleton<CharacterAnalyzer>();
|
|
collection.AddSingleton<TokenProvider>();
|
|
collection.AddSingleton<PluginWarningNotificationService>();
|
|
collection.AddSingleton<FileCompactor>();
|
|
collection.AddSingleton<TagHandler>();
|
|
collection.AddSingleton<UidDisplayHandler>();
|
|
collection.AddSingleton((s) => new IpcProvider(s.GetRequiredService<ILogger<IpcProvider>>(),
|
|
pluginInterface,
|
|
s.GetRequiredService<MareCharaFileManager>(), s.GetRequiredService<DalamudUtilService>()));
|
|
collection.AddSingleton<PlayerPerformanceService>();
|
|
collection.AddSingleton((s) => new EventAggregator(s.GetRequiredService<MareConfigService>(),
|
|
s.GetRequiredService<ILogger<EventAggregator>>(), s.GetRequiredService<MareMediator>()));
|
|
collection.AddSingleton((s) => new DalamudUtilService(s.GetRequiredService<ILogger<DalamudUtilService>>(),
|
|
clientState, objectTable, framework, gameGui, toastGui, condition, gameData, targetManager,
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<PerformanceCollectorService>()));
|
|
collection.AddSingleton((s) => new DtrEntry(s.GetRequiredService<ILogger<DtrEntry>>(), dtrBar, s.GetRequiredService<MareConfigService>(),
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<PairManager>(), s.GetRequiredService<ApiController>()));
|
|
collection.AddSingleton(s => new PairManager(s.GetRequiredService<ILogger<PairManager>>(), s.GetRequiredService<PairFactory>(),
|
|
s.GetRequiredService<MareConfigService>(), s.GetRequiredService<MareMediator>(), contextMenu));
|
|
collection.AddSingleton<RedrawManager>();
|
|
collection.AddSingleton((s) => new IpcCallerPenumbra(s.GetRequiredService<ILogger<IpcCallerPenumbra>>(), pluginInterface,
|
|
s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>(), s.GetRequiredService<RedrawManager>()));
|
|
collection.AddSingleton((s) => new IpcCallerGlamourer(s.GetRequiredService<ILogger<IpcCallerGlamourer>>(), pluginInterface,
|
|
s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>(), s.GetRequiredService<RedrawManager>()));
|
|
collection.AddSingleton((s) => new IpcCallerCustomize(s.GetRequiredService<ILogger<IpcCallerCustomize>>(), pluginInterface,
|
|
s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>()));
|
|
collection.AddSingleton((s) => new IpcCallerHeels(s.GetRequiredService<ILogger<IpcCallerHeels>>(), pluginInterface,
|
|
s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>()));
|
|
collection.AddSingleton((s) => new IpcCallerHonorific(s.GetRequiredService<ILogger<IpcCallerHonorific>>(), pluginInterface,
|
|
s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>()));
|
|
collection.AddSingleton((s) => new IpcCallerPetNames(s.GetRequiredService<ILogger<IpcCallerPetNames>>(), pluginInterface,
|
|
s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>()));
|
|
collection.AddSingleton((s) => new IpcManager(s.GetRequiredService<ILogger<IpcManager>>(),
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<IpcCallerPenumbra>(), s.GetRequiredService<IpcCallerGlamourer>(),
|
|
s.GetRequiredService<IpcCallerCustomize>(), s.GetRequiredService<IpcCallerHeels>(), s.GetRequiredService<IpcCallerHonorific>(),
|
|
s.GetRequiredService<IpcCallerPetNames>()));
|
|
collection.AddSingleton((s) => new NotificationService(s.GetRequiredService<ILogger<NotificationService>>(),
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<DalamudUtilService>(),
|
|
notificationManager, chatGui, s.GetRequiredService<MareConfigService>()));
|
|
collection.AddSingleton((s) => new MareConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new ServerConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new NotesConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new ServerTagConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new SyncshellConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new TransientConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new XivDataStorageService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new PlayerPerformanceConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new ServerBlockConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new ConfigurationMigrator(s.GetRequiredService<ILogger<ConfigurationMigrator>>(), s.GetRequiredService<NotesConfigService>()));
|
|
collection.AddSingleton<HubFactory>();
|
|
|
|
// add scoped services
|
|
collection.AddScoped<CacheMonitor>();
|
|
collection.AddScoped<UiFactory>();
|
|
collection.AddScoped<WindowMediatorSubscriberBase, SettingsUi>();
|
|
collection.AddScoped<WindowMediatorSubscriberBase, CompactUi>();
|
|
collection.AddScoped<WindowMediatorSubscriberBase, GposeUi>();
|
|
collection.AddScoped<WindowMediatorSubscriberBase, IntroUi>();
|
|
collection.AddScoped<WindowMediatorSubscriberBase, DownloadUi>();
|
|
collection.AddScoped<WindowMediatorSubscriberBase, PopoutProfileUi>();
|
|
collection.AddScoped<WindowMediatorSubscriberBase, DataAnalysisUi>();
|
|
collection.AddScoped<WindowMediatorSubscriberBase, EventViewerUI>();
|
|
|
|
collection.AddScoped<WindowMediatorSubscriberBase, EditProfileUi>((s) => new EditProfileUi(s.GetRequiredService<ILogger<EditProfileUi>>(),
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<ApiController>(), s.GetRequiredService<UiSharedService>(), s.GetRequiredService<FileDialogManager>(),
|
|
s.GetRequiredService<ServerConfigurationManager>(), s.GetRequiredService<MareProfileManager>(), s.GetRequiredService<PerformanceCollectorService>()));
|
|
collection.AddScoped<WindowMediatorSubscriberBase, PopupHandler>();
|
|
collection.AddScoped<IPopupHandler, ReportPopupHandler>();
|
|
collection.AddScoped<IPopupHandler, BanUserPopupHandler>();
|
|
collection.AddScoped<CacheCreationService>();
|
|
collection.AddScoped<TransientResourceManager>();
|
|
collection.AddScoped<PlayerDataFactory>();
|
|
collection.AddScoped<OnlinePlayerManager>();
|
|
collection.AddScoped((s) => new UiService(s.GetRequiredService<ILogger<UiService>>(), pluginInterface.UiBuilder, s.GetRequiredService<MareConfigService>(),
|
|
s.GetRequiredService<WindowSystem>(), s.GetServices<WindowMediatorSubscriberBase>(),
|
|
s.GetRequiredService<UiFactory>(),
|
|
s.GetRequiredService<FileDialogManager>(), s.GetRequiredService<MareMediator>()));
|
|
collection.AddScoped((s) => new CommandManagerService(commandManager, s.GetRequiredService<PerformanceCollectorService>(),
|
|
s.GetRequiredService<ServerConfigurationManager>(), s.GetRequiredService<CacheMonitor>(), s.GetRequiredService<ChatService>(), s.GetRequiredService<ApiController>(),
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<MareConfigService>()));
|
|
collection.AddScoped((s) => new UiSharedService(s.GetRequiredService<ILogger<UiSharedService>>(), s.GetRequiredService<IpcManager>(), s.GetRequiredService<ApiController>(),
|
|
s.GetRequiredService<CacheMonitor>(), s.GetRequiredService<FileDialogManager>(), s.GetRequiredService<MareConfigService>(), s.GetRequiredService<DalamudUtilService>(),
|
|
pluginInterface, textureProvider, s.GetRequiredService<Dalamud.Localization>(), s.GetRequiredService<ServerConfigurationManager>(), s.GetRequiredService<MareMediator>()));
|
|
collection.AddScoped((s) => new ChatService(s.GetRequiredService<ILogger<ChatService>>(), s.GetRequiredService<DalamudUtilService>(),
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<ApiController>(), s.GetRequiredService<PairManager>(),
|
|
s.GetRequiredService<ILogger<GameChatHooks>>(), gameInteropProvider, chatGui,
|
|
s.GetRequiredService<MareConfigService>(), s.GetRequiredService<ServerConfigurationManager>()));
|
|
collection.AddScoped((s) => new GuiHookService(s.GetRequiredService<ILogger<GuiHookService>>(), s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>(),
|
|
s.GetRequiredService<MareConfigService>(), namePlateGui, gameConfig, partyList, s.GetRequiredService<PairManager>()));
|
|
|
|
collection.AddHostedService(p => p.GetRequiredService<MareMediator>());
|
|
collection.AddHostedService(p => p.GetRequiredService<NotificationService>());
|
|
collection.AddHostedService(p => p.GetRequiredService<FileCacheManager>());
|
|
collection.AddHostedService(p => p.GetRequiredService<ConfigurationMigrator>());
|
|
collection.AddHostedService(p => p.GetRequiredService<DalamudUtilService>());
|
|
collection.AddHostedService(p => p.GetRequiredService<PerformanceCollectorService>());
|
|
collection.AddHostedService(p => p.GetRequiredService<DtrEntry>());
|
|
collection.AddHostedService(p => p.GetRequiredService<EventAggregator>());
|
|
collection.AddHostedService(p => p.GetRequiredService<MarePlugin>());
|
|
collection.AddHostedService(p => p.GetRequiredService<IpcProvider>());
|
|
})
|
|
.Build();
|
|
|
|
Task.Run(async () => {
|
|
try
|
|
{
|
|
await _host.StartAsync();
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
pluginLog.Error(e, "HostBuilder startup exception");
|
|
}
|
|
});
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_host.StopAsync().GetAwaiter().GetResult();
|
|
_host.Dispose();
|
|
}
|
|
} |