* tag '0.9.21': fix combat situations not redrawing every time after combat ends add more resilience to MCDF export and loading disable data application and scanner in combat fix bug add lock around adding to cached handled paths disable target in pvp add click to target in ui change tooltip for penumbra version to 0.8.2.1 add file storage validation add experimental resolving of data through penumbra adjust initial dialog to opt in/out into census with buttons
144 lines
8.8 KiB
C#
144 lines
8.8 KiB
C#
using Dalamud.ContextMenu;
|
|
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.MareConfiguration;
|
|
using MareSynchronos.PlayerData.Export;
|
|
using MareSynchronos.PlayerData.Factories;
|
|
using MareSynchronos.PlayerData.Pairs;
|
|
using MareSynchronos.PlayerData.Services;
|
|
using MareSynchronos.Services;
|
|
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;
|
|
|
|
namespace MareSynchronos;
|
|
|
|
public sealed class Plugin : IDalamudPlugin
|
|
{
|
|
private readonly CancellationTokenSource _pluginCts = new();
|
|
private readonly Task _hostBuilderRunTask;
|
|
|
|
public Plugin(DalamudPluginInterface pluginInterface, ICommandManager commandManager, IDataManager gameData,
|
|
IFramework framework, IObjectTable objectTable, IClientState clientState, ICondition condition, IChatGui chatGui,
|
|
IGameGui gameGui, IDtrBar dtrBar, IPluginLog pluginLog, ITargetManager targetManager)
|
|
{
|
|
_hostBuilderRunTask = 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<PairManager>();
|
|
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<PairFactory>();
|
|
collection.AddSingleton<CharacterAnalyzer>();
|
|
collection.AddSingleton<TokenProvider>();
|
|
collection.AddSingleton<PluginWarningNotificationService>();
|
|
collection.AddSingleton<FileCompactor>();
|
|
collection.AddSingleton<TagHandler>();
|
|
collection.AddSingleton<UidDisplayHandler>();
|
|
collection.AddSingleton((s) => new DalamudContextMenu(pluginInterface));
|
|
collection.AddSingleton((s) => new DalamudUtilService(s.GetRequiredService<ILogger<DalamudUtilService>>(),
|
|
clientState, objectTable, framework, gameGui, 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 IpcManager(s.GetRequiredService<ILogger<IpcManager>>(),
|
|
pluginInterface, s.GetRequiredService<DalamudUtilService>(), s.GetRequiredService<MareMediator>()));
|
|
|
|
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 TransientConfigService(pluginInterface.ConfigDirectory.FullName));
|
|
collection.AddSingleton((s) => new ConfigurationMigrator(s.GetRequiredService<ILogger<ConfigurationMigrator>>(), pluginInterface));
|
|
collection.AddSingleton<HubFactory>();
|
|
|
|
// add scoped services
|
|
collection.AddScoped<PeriodicFileScanner>();
|
|
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, EditProfileUi>((s) => new EditProfileUi(s.GetRequiredService<ILogger<EditProfileUi>>(),
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<ApiController>(), pluginInterface.UiBuilder, s.GetRequiredService<UiSharedService>(),
|
|
s.GetRequiredService<FileDialogManager>(), s.GetRequiredService<MareProfileManager>()));
|
|
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<PeriodicFileScanner>(), s.GetRequiredService<ApiController>(),
|
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<MareConfigService>()));
|
|
collection.AddScoped((s) => new NotificationService(s.GetRequiredService<ILogger<NotificationService>>(),
|
|
s.GetRequiredService<MareMediator>(), pluginInterface.UiBuilder, chatGui, s.GetRequiredService<MareConfigService>()));
|
|
collection.AddScoped((s) => new UiSharedService(s.GetRequiredService<ILogger<UiSharedService>>(), s.GetRequiredService<IpcManager>(), s.GetRequiredService<ApiController>(),
|
|
s.GetRequiredService<PeriodicFileScanner>(), s.GetRequiredService<FileDialogManager>(), s.GetRequiredService<MareConfigService>(), s.GetRequiredService<DalamudUtilService>(),
|
|
pluginInterface, s.GetRequiredService<Dalamud.Localization>(), s.GetRequiredService<ServerConfigurationManager>(), s.GetRequiredService<MareMediator>()));
|
|
|
|
collection.AddHostedService(p => p.GetRequiredService<MareMediator>());
|
|
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<MarePlugin>());
|
|
})
|
|
.Build()
|
|
.RunAsync(_pluginCts.Token);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_pluginCts.Cancel();
|
|
_pluginCts.Dispose();
|
|
Task.WaitAny(_hostBuilderRunTask);
|
|
}
|
|
} |