Added chat notification pair request send (#111)

Co-authored-by: cake <admin@cakeandbanana.nl>
Reviewed-on: #111
Reviewed-by: defnotken <defnotken@noreply.git.lightless-sync.org>
This commit was merged in pull request #111.
This commit is contained in:
2025-12-26 20:43:19 +00:00
parent 65dea18f5f
commit 0b32639f99
2 changed files with 31 additions and 6 deletions

View File

@@ -40,6 +40,7 @@ using System.Reflection;
using OtterTex; using OtterTex;
using LightlessSync.Services.LightFinder; using LightlessSync.Services.LightFinder;
using LightlessSync.Services.PairProcessing; using LightlessSync.Services.PairProcessing;
using LightlessSync.UI.Models;
namespace LightlessSync; namespace LightlessSync;
@@ -300,7 +301,10 @@ public sealed class Plugin : IDalamudPlugin
sp.GetRequiredService<LightFinderScannerService>(), sp.GetRequiredService<LightFinderScannerService>(),
sp.GetRequiredService<LightFinderService>(), sp.GetRequiredService<LightFinderService>(),
sp.GetRequiredService<LightlessProfileManager>(), sp.GetRequiredService<LightlessProfileManager>(),
sp.GetRequiredService<LightlessMediator>())); sp.GetRequiredService<LightlessMediator>(),
chatGui,
sp.GetRequiredService<NotificationService>())
);
// IPC callers / manager // IPC callers / manager
services.AddSingleton(sp => new IpcCallerPenumbra( services.AddSingleton(sp => new IpcCallerPenumbra(

View File

@@ -4,21 +4,22 @@ using Dalamud.Plugin;
using Dalamud.Plugin.Services; using Dalamud.Plugin.Services;
using LightlessSync.LightlessConfiguration; using LightlessSync.LightlessConfiguration;
using LightlessSync.LightlessConfiguration.Models; using LightlessSync.LightlessConfiguration.Models;
using LightlessSync.Services.LightFinder;
using LightlessSync.Services.Mediator; using LightlessSync.Services.Mediator;
using LightlessSync.UI;
using LightlessSync.UI.Services;
using LightlessSync.Utils; using LightlessSync.Utils;
using LightlessSync.WebAPI; using LightlessSync.WebAPI;
using Lumina.Excel.Sheets; using Lumina.Excel.Sheets;
using LightlessSync.UI.Services;
using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using LightlessSync.UI;
using LightlessSync.Services.LightFinder;
namespace LightlessSync.Services; namespace LightlessSync.Services;
internal class ContextMenuService : IHostedService internal class ContextMenuService : IHostedService
{ {
private readonly IContextMenu _contextMenu; private readonly IContextMenu _contextMenu;
private readonly IChatGui _chatGui;
private readonly IDalamudPluginInterface _pluginInterface; private readonly IDalamudPluginInterface _pluginInterface;
private readonly IDataManager _gameData; private readonly IDataManager _gameData;
private readonly ILogger<ContextMenuService> _logger; private readonly ILogger<ContextMenuService> _logger;
@@ -29,6 +30,7 @@ internal class ContextMenuService : IHostedService
private readonly ApiController _apiController; private readonly ApiController _apiController;
private readonly IObjectTable _objectTable; private readonly IObjectTable _objectTable;
private readonly LightlessConfigService _configService; private readonly LightlessConfigService _configService;
private readonly NotificationService _lightlessNotification;
private readonly LightFinderScannerService _broadcastScannerService; private readonly LightFinderScannerService _broadcastScannerService;
private readonly LightFinderService _broadcastService; private readonly LightFinderService _broadcastService;
private readonly LightlessProfileManager _lightlessProfileManager; private readonly LightlessProfileManager _lightlessProfileManager;
@@ -43,7 +45,7 @@ internal class ContextMenuService : IHostedService
ILogger<ContextMenuService> logger, ILogger<ContextMenuService> logger,
DalamudUtilService dalamudUtil, DalamudUtilService dalamudUtil,
ApiController apiController, ApiController apiController,
IObjectTable objectTable, IObjectTable objectTable,
LightlessConfigService configService, LightlessConfigService configService,
PairRequestService pairRequestService, PairRequestService pairRequestService,
PairUiService pairUiService, PairUiService pairUiService,
@@ -51,7 +53,9 @@ internal class ContextMenuService : IHostedService
LightFinderScannerService broadcastScannerService, LightFinderScannerService broadcastScannerService,
LightFinderService broadcastService, LightFinderService broadcastService,
LightlessProfileManager lightlessProfileManager, LightlessProfileManager lightlessProfileManager,
LightlessMediator mediator) LightlessMediator mediator,
IChatGui chatGui,
NotificationService lightlessNotification)
{ {
_contextMenu = contextMenu; _contextMenu = contextMenu;
_pluginInterface = pluginInterface; _pluginInterface = pluginInterface;
@@ -68,6 +72,8 @@ internal class ContextMenuService : IHostedService
_broadcastService = broadcastService; _broadcastService = broadcastService;
_lightlessProfileManager = lightlessProfileManager; _lightlessProfileManager = lightlessProfileManager;
_mediator = mediator; _mediator = mediator;
_chatGui = chatGui;
_lightlessNotification = lightlessNotification;
} }
public Task StartAsync(CancellationToken cancellationToken) public Task StartAsync(CancellationToken cancellationToken)
@@ -204,6 +210,18 @@ internal class ContextMenuService : IHostedService
.Where(p => p.IsVisible && p.PlayerCharacterId != uint.MaxValue) .Where(p => p.IsVisible && p.PlayerCharacterId != uint.MaxValue)
.Select(p => (ulong)p.PlayerCharacterId)]; .Select(p => (ulong)p.PlayerCharacterId)];
private void NotifyInChat(string message, NotificationType type = NotificationType.Info)
{
if (!_configService.Current.UseLightlessNotifications || (_configService.Current.LightlessPairRequestNotification == NotificationLocation.Chat || _configService.Current.LightlessPairRequestNotification == NotificationLocation.ChatAndLightlessUi))
{
var chatMsg = $"[Lightless] {message}";
if (type == NotificationType.Error)
_chatGui.PrintError(chatMsg);
else
_chatGui.Print(chatMsg);
}
}
private async Task HandleSelection(IMenuArgs args) private async Task HandleSelection(IMenuArgs args)
{ {
if (args.Target is not MenuTargetDefault target) if (args.Target is not MenuTargetDefault target)
@@ -232,6 +250,9 @@ internal class ContextMenuService : IHostedService
{ {
_pairRequestService.RemoveRequest(receiverCid); _pairRequestService.RemoveRequest(receiverCid);
} }
// Notify in chat when NotificationService is disabled
NotifyInChat($"Pair request sent to {target.TargetName}@{world.Name}.", NotificationType.Info);
} }
catch (Exception ex) catch (Exception ex)
{ {