NoSoliciting/NoSoliciting/ContextMenu.cs
2021-04-27 20:58:21 -04:00

67 lines
2.4 KiB
C#
Executable File

using System;
using System.Linq;
using System.Threading.Tasks;
using CheapLoc;
using NoSoliciting.Interface;
using XivCommon.Functions;
namespace NoSoliciting {
public class ContextMenu : IDisposable {
private Plugin Plugin { get; }
internal ContextMenu(Plugin plugin) {
this.Plugin = plugin;
this.Plugin.Common.Functions.ContextMenu.OpenContextMenu += this.OnOpenContextMenu;
}
public void Dispose() {
this.Plugin.Common.Functions.ContextMenu.OpenContextMenu -= this.OnOpenContextMenu;
}
private void OnOpenContextMenu(ContextMenuArgs args) {
if (args.ParentAddonName != "LookingForGroup") {
return;
}
var label = Loc.Localize("ReportToNoSoliciting", "Report to NoSoliciting");
args.AdditionalItems.Add(new ContextMenuItem(label, this.Report));
}
private void Report(ContextMenuItemSelectedArgs args) {
if (args.ContentIdLower == 0) {
return;
}
var listing = this.Plugin.Common.Functions.PartyFinder.CurrentListings
.Values
.FirstOrDefault(listing => listing.ContentIdLower == args.ContentIdLower);
if (listing == null) {
return;
}
var message = this.Plugin.PartyFinderHistory.FirstOrDefault(message => message.ActorId == listing.ContentIdLower);
if (message == null) {
return;
}
Task.Run(async () => {
var status = await this.Plugin.Ui.Report.ReportMessageAsync(message);
switch (status) {
case ReportStatus.Successful: {
var msg = Loc.Localize("ReportToastSuccess", "Party Finder listing hosted by {0} reported successfully.");
this.Plugin.Interface.Framework.Gui.Toast.ShowNormal(string.Format(msg, listing.Name));
break;
}
case ReportStatus.Failure: {
var msg = Loc.Localize("ReportToastFailure", "Failed to report Party Finder listing hosted by {0}.");
this.Plugin.Interface.Framework.Gui.Toast.ShowError(string.Format(msg, listing.Name));
break;
}
}
});
}
}
}