Initial
This commit is contained in:
76
MareSynchronos/Services/PluginWarningNotificationService.cs
Normal file
76
MareSynchronos/Services/PluginWarningNotificationService.cs
Normal file
@@ -0,0 +1,76 @@
|
||||
using MareSynchronos.API.Data;
|
||||
using MareSynchronos.API.Data.Comparer;
|
||||
using MareSynchronos.Interop.Ipc;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.MareConfiguration.Models;
|
||||
using MareSynchronos.Services.Mediator;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace MareSynchronos.PlayerData.Pairs;
|
||||
|
||||
public class PluginWarningNotificationService
|
||||
{
|
||||
private readonly ConcurrentDictionary<UserData, OptionalPluginWarning> _cachedOptionalPluginWarnings = new(UserDataComparer.Instance);
|
||||
private readonly IpcManager _ipcManager;
|
||||
private readonly MareConfigService _mareConfigService;
|
||||
private readonly MareMediator _mediator;
|
||||
|
||||
public PluginWarningNotificationService(MareConfigService mareConfigService, IpcManager ipcManager, MareMediator mediator)
|
||||
{
|
||||
_mareConfigService = mareConfigService;
|
||||
_ipcManager = ipcManager;
|
||||
_mediator = mediator;
|
||||
}
|
||||
|
||||
public void NotifyForMissingPlugins(UserData user, string playerName, HashSet<PlayerChanges> changes)
|
||||
{
|
||||
if (!_cachedOptionalPluginWarnings.TryGetValue(user, out var warning))
|
||||
{
|
||||
_cachedOptionalPluginWarnings[user] = warning = new()
|
||||
{
|
||||
ShownCustomizePlusWarning = _mareConfigService.Current.DisableOptionalPluginWarnings,
|
||||
ShownHeelsWarning = _mareConfigService.Current.DisableOptionalPluginWarnings,
|
||||
ShownHonorificWarning = _mareConfigService.Current.DisableOptionalPluginWarnings,
|
||||
ShowPetNicknamesWarning = _mareConfigService.Current.DisableOptionalPluginWarnings,
|
||||
ShownMoodlesWarning = _mareConfigService.Current.DisableOptionalPluginWarnings
|
||||
};
|
||||
}
|
||||
|
||||
List<string> missingPluginsForData = [];
|
||||
if (changes.Contains(PlayerChanges.Heels) && !warning.ShownHeelsWarning && !_ipcManager.Heels.APIAvailable)
|
||||
{
|
||||
missingPluginsForData.Add("SimpleHeels");
|
||||
warning.ShownHeelsWarning = true;
|
||||
}
|
||||
if (changes.Contains(PlayerChanges.Customize) && !warning.ShownCustomizePlusWarning && !_ipcManager.CustomizePlus.APIAvailable)
|
||||
{
|
||||
missingPluginsForData.Add("Customize+");
|
||||
warning.ShownCustomizePlusWarning = true;
|
||||
}
|
||||
|
||||
if (changes.Contains(PlayerChanges.Honorific) && !warning.ShownHonorificWarning && !_ipcManager.Honorific.APIAvailable)
|
||||
{
|
||||
missingPluginsForData.Add("Honorific");
|
||||
warning.ShownHonorificWarning = true;
|
||||
}
|
||||
|
||||
if (changes.Contains(PlayerChanges.PetNames) && !warning.ShowPetNicknamesWarning && !_ipcManager.PetNames.APIAvailable)
|
||||
{
|
||||
missingPluginsForData.Add("PetNicknames");
|
||||
warning.ShowPetNicknamesWarning = true;
|
||||
}
|
||||
|
||||
if (changes.Contains(PlayerChanges.Moodles) && !warning.ShownMoodlesWarning && !_ipcManager.Moodles.APIAvailable)
|
||||
{
|
||||
missingPluginsForData.Add("Moodles");
|
||||
warning.ShownMoodlesWarning = true;
|
||||
}
|
||||
|
||||
if (missingPluginsForData.Any())
|
||||
{
|
||||
_mediator.Publish(new NotificationMessage("Missing plugins for " + playerName,
|
||||
$"Received data for {playerName} that contained information for plugins you have not installed. Install {string.Join(", ", missingPluginsForData)} to experience their character fully.",
|
||||
NotificationType.Warning, TimeSpan.FromSeconds(10)));
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user