Merge branch 'refs/heads/2.0.0' into notif-style-rework
This commit is contained in:
@@ -6,7 +6,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
PLUGIN_NAME: LightlessSync
|
PLUGIN_NAME: LightlessSync
|
||||||
DOTNET_VERSION: 9.x
|
DOTNET_VERSION: 10.x.x
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tag-and-release:
|
tag-and-release:
|
||||||
@@ -16,15 +16,15 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Lightless
|
- name: Checkout Lightless
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v5
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
submodules: true
|
submodules: true
|
||||||
|
|
||||||
- name: Setup .NET 9 SDK
|
- name: Setup .NET 10 SDK
|
||||||
uses: actions/setup-dotnet@v4
|
uses: actions/setup-dotnet@v5
|
||||||
with:
|
with:
|
||||||
dotnet-version: 9.x
|
dotnet-version: 10.x.x
|
||||||
|
|
||||||
- name: Download Dalamud
|
- name: Download Dalamud
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
Submodule LightlessAPI updated: dfb0594a5b...35f3390dda
@@ -1,6 +1,6 @@
|
|||||||
using Dalamud.Game.ClientState.Objects.Types;
|
using Brio.API;
|
||||||
|
using Dalamud.Game.ClientState.Objects.Types;
|
||||||
using Dalamud.Plugin;
|
using Dalamud.Plugin;
|
||||||
using Dalamud.Plugin.Ipc;
|
|
||||||
using LightlessSync.API.Dto.CharaData;
|
using LightlessSync.API.Dto.CharaData;
|
||||||
using LightlessSync.Interop.Ipc.Framework;
|
using LightlessSync.Interop.Ipc.Framework;
|
||||||
using LightlessSync.Services;
|
using LightlessSync.Services;
|
||||||
@@ -13,21 +13,23 @@ namespace LightlessSync.Interop.Ipc;
|
|||||||
|
|
||||||
public sealed class IpcCallerBrio : IpcServiceBase
|
public sealed class IpcCallerBrio : IpcServiceBase
|
||||||
{
|
{
|
||||||
private static readonly IpcServiceDescriptor BrioDescriptor = new("Brio", "Brio", new Version(0, 0, 0, 0));
|
private static readonly IpcServiceDescriptor BrioDescriptor = new("Brio", "Brio", new Version(3, 0, 0, 0));
|
||||||
|
|
||||||
private readonly ILogger<IpcCallerBrio> _logger;
|
private readonly ILogger<IpcCallerBrio> _logger;
|
||||||
private readonly DalamudUtilService _dalamudUtilService;
|
private readonly DalamudUtilService _dalamudUtilService;
|
||||||
private readonly ICallGateSubscriber<(int, int)> _brioApiVersion;
|
|
||||||
|
|
||||||
private readonly ICallGateSubscriber<bool, bool, bool, Task<IGameObject>> _brioSpawnActorAsync;
|
private readonly ApiVersion _apiVersion;
|
||||||
private readonly ICallGateSubscriber<IGameObject, bool> _brioDespawnActor;
|
|
||||||
private readonly ICallGateSubscriber<IGameObject, Vector3?, Quaternion?, Vector3?, bool, bool> _brioSetModelTransform;
|
|
||||||
private readonly ICallGateSubscriber<IGameObject, (Vector3?, Quaternion?, Vector3?)> _brioGetModelTransform;
|
|
||||||
private readonly ICallGateSubscriber<IGameObject, string> _brioGetPoseAsJson;
|
|
||||||
private readonly ICallGateSubscriber<IGameObject, string, bool, bool> _brioSetPoseFromJson;
|
|
||||||
private readonly ICallGateSubscriber<IGameObject, bool> _brioFreezeActor;
|
|
||||||
private readonly ICallGateSubscriber<bool> _brioFreezePhysics;
|
|
||||||
|
|
||||||
|
private readonly SpawnActor _spawnActor;
|
||||||
|
private readonly DespawnActor _despawnActor;
|
||||||
|
private readonly SetModelTransform _setModelTransform;
|
||||||
|
private readonly GetModelTransform _getModelTransform;
|
||||||
|
|
||||||
|
private readonly GetPoseAsJson _getPoseAsJson;
|
||||||
|
private readonly LoadPoseFromJson _setPoseFromJson;
|
||||||
|
|
||||||
|
private readonly FreezeActor _freezeActor;
|
||||||
|
private readonly FreezePhysics _freezePhysics;
|
||||||
|
|
||||||
public IpcCallerBrio(ILogger<IpcCallerBrio> logger, IDalamudPluginInterface dalamudPluginInterface,
|
public IpcCallerBrio(ILogger<IpcCallerBrio> logger, IDalamudPluginInterface dalamudPluginInterface,
|
||||||
DalamudUtilService dalamudUtilService, LightlessMediator mediator) : base(logger, mediator, dalamudPluginInterface, BrioDescriptor)
|
DalamudUtilService dalamudUtilService, LightlessMediator mediator) : base(logger, mediator, dalamudPluginInterface, BrioDescriptor)
|
||||||
@@ -35,15 +37,18 @@ public sealed class IpcCallerBrio : IpcServiceBase
|
|||||||
_logger = logger;
|
_logger = logger;
|
||||||
_dalamudUtilService = dalamudUtilService;
|
_dalamudUtilService = dalamudUtilService;
|
||||||
|
|
||||||
_brioApiVersion = dalamudPluginInterface.GetIpcSubscriber<(int, int)>("Brio.ApiVersion");
|
_apiVersion = new ApiVersion(dalamudPluginInterface);
|
||||||
_brioSpawnActorAsync = dalamudPluginInterface.GetIpcSubscriber<bool, bool, bool, Task<IGameObject>>("Brio.Actor.SpawnExAsync");
|
_spawnActor = new SpawnActor(dalamudPluginInterface);
|
||||||
_brioDespawnActor = dalamudPluginInterface.GetIpcSubscriber<IGameObject, bool>("Brio.Actor.Despawn");
|
_despawnActor = new DespawnActor(dalamudPluginInterface);
|
||||||
_brioSetModelTransform = dalamudPluginInterface.GetIpcSubscriber<IGameObject, Vector3?, Quaternion?, Vector3?, bool, bool>("Brio.Actor.SetModelTransform");
|
|
||||||
_brioGetModelTransform = dalamudPluginInterface.GetIpcSubscriber<IGameObject, (Vector3?, Quaternion?, Vector3?)>("Brio.Actor.GetModelTransform");
|
_setModelTransform = new SetModelTransform(dalamudPluginInterface);
|
||||||
_brioGetPoseAsJson = dalamudPluginInterface.GetIpcSubscriber<IGameObject, string>("Brio.Actor.Pose.GetPoseAsJson");
|
_getModelTransform = new GetModelTransform(dalamudPluginInterface);
|
||||||
_brioSetPoseFromJson = dalamudPluginInterface.GetIpcSubscriber<IGameObject, string, bool, bool>("Brio.Actor.Pose.LoadFromJson");
|
|
||||||
_brioFreezeActor = dalamudPluginInterface.GetIpcSubscriber<IGameObject, bool>("Brio.Actor.Freeze");
|
_getPoseAsJson = new GetPoseAsJson(dalamudPluginInterface);
|
||||||
_brioFreezePhysics = dalamudPluginInterface.GetIpcSubscriber<bool>("Brio.FreezePhysics");
|
_setPoseFromJson = new LoadPoseFromJson(dalamudPluginInterface);
|
||||||
|
|
||||||
|
_freezeActor = new FreezeActor(dalamudPluginInterface);
|
||||||
|
_freezePhysics = new FreezePhysics(dalamudPluginInterface);
|
||||||
|
|
||||||
CheckAPI();
|
CheckAPI();
|
||||||
}
|
}
|
||||||
@@ -52,7 +57,7 @@ public sealed class IpcCallerBrio : IpcServiceBase
|
|||||||
{
|
{
|
||||||
if (!APIAvailable) return null;
|
if (!APIAvailable) return null;
|
||||||
_logger.LogDebug("Spawning Brio Actor");
|
_logger.LogDebug("Spawning Brio Actor");
|
||||||
return await _brioSpawnActorAsync.InvokeFunc(false, false, true).ConfigureAwait(false);
|
return await _dalamudUtilService.RunOnFrameworkThread(() => _spawnActor.Invoke(Brio.API.Enums.SpawnFlags.Default, true)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> DespawnActorAsync(nint address)
|
public async Task<bool> DespawnActorAsync(nint address)
|
||||||
@@ -61,7 +66,7 @@ public sealed class IpcCallerBrio : IpcServiceBase
|
|||||||
var gameObject = await _dalamudUtilService.CreateGameObjectAsync(address).ConfigureAwait(false);
|
var gameObject = await _dalamudUtilService.CreateGameObjectAsync(address).ConfigureAwait(false);
|
||||||
if (gameObject == null) return false;
|
if (gameObject == null) return false;
|
||||||
_logger.LogDebug("Despawning Brio Actor {actor}", gameObject.Name.TextValue);
|
_logger.LogDebug("Despawning Brio Actor {actor}", gameObject.Name.TextValue);
|
||||||
return await _dalamudUtilService.RunOnFrameworkThread(() => _brioDespawnActor.InvokeFunc(gameObject)).ConfigureAwait(false);
|
return await _dalamudUtilService.RunOnFrameworkThread(() => _despawnActor.Invoke(gameObject)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> ApplyTransformAsync(nint address, WorldData data)
|
public async Task<bool> ApplyTransformAsync(nint address, WorldData data)
|
||||||
@@ -71,7 +76,7 @@ public sealed class IpcCallerBrio : IpcServiceBase
|
|||||||
if (gameObject == null) return false;
|
if (gameObject == null) return false;
|
||||||
_logger.LogDebug("Applying Transform to Actor {actor}", gameObject.Name.TextValue);
|
_logger.LogDebug("Applying Transform to Actor {actor}", gameObject.Name.TextValue);
|
||||||
|
|
||||||
return await _dalamudUtilService.RunOnFrameworkThread(() => _brioSetModelTransform.InvokeFunc(gameObject,
|
return await _dalamudUtilService.RunOnFrameworkThread(() => _setModelTransform.Invoke(gameObject,
|
||||||
new Vector3(data.PositionX, data.PositionY, data.PositionZ),
|
new Vector3(data.PositionX, data.PositionY, data.PositionZ),
|
||||||
new Quaternion(data.RotationX, data.RotationY, data.RotationZ, data.RotationW),
|
new Quaternion(data.RotationX, data.RotationY, data.RotationZ, data.RotationW),
|
||||||
new Vector3(data.ScaleX, data.ScaleY, data.ScaleZ), false)).ConfigureAwait(false);
|
new Vector3(data.ScaleX, data.ScaleY, data.ScaleZ), false)).ConfigureAwait(false);
|
||||||
@@ -82,8 +87,7 @@ public sealed class IpcCallerBrio : IpcServiceBase
|
|||||||
if (!APIAvailable) return default;
|
if (!APIAvailable) return default;
|
||||||
var gameObject = await _dalamudUtilService.CreateGameObjectAsync(address).ConfigureAwait(false);
|
var gameObject = await _dalamudUtilService.CreateGameObjectAsync(address).ConfigureAwait(false);
|
||||||
if (gameObject == null) return default;
|
if (gameObject == null) return default;
|
||||||
var data = await _dalamudUtilService.RunOnFrameworkThread(() => _brioGetModelTransform.InvokeFunc(gameObject)).ConfigureAwait(false);
|
var data = await _dalamudUtilService.RunOnFrameworkThread(() => _getModelTransform.Invoke(gameObject)).ConfigureAwait(false);
|
||||||
//_logger.LogDebug("Getting Transform from Actor {actor}", gameObject.Name.TextValue);
|
|
||||||
|
|
||||||
return new WorldData()
|
return new WorldData()
|
||||||
{
|
{
|
||||||
@@ -107,7 +111,7 @@ public sealed class IpcCallerBrio : IpcServiceBase
|
|||||||
if (gameObject == null) return null;
|
if (gameObject == null) return null;
|
||||||
_logger.LogDebug("Getting Pose from Actor {actor}", gameObject.Name.TextValue);
|
_logger.LogDebug("Getting Pose from Actor {actor}", gameObject.Name.TextValue);
|
||||||
|
|
||||||
return await _dalamudUtilService.RunOnFrameworkThread(() => _brioGetPoseAsJson.InvokeFunc(gameObject)).ConfigureAwait(false);
|
return await _dalamudUtilService.RunOnFrameworkThread(() => _getPoseAsJson.Invoke(gameObject)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> SetPoseAsync(nint address, string pose)
|
public async Task<bool> SetPoseAsync(nint address, string pose)
|
||||||
@@ -118,15 +122,15 @@ public sealed class IpcCallerBrio : IpcServiceBase
|
|||||||
_logger.LogDebug("Setting Pose to Actor {actor}", gameObject.Name.TextValue);
|
_logger.LogDebug("Setting Pose to Actor {actor}", gameObject.Name.TextValue);
|
||||||
|
|
||||||
var applicablePose = JsonNode.Parse(pose)!;
|
var applicablePose = JsonNode.Parse(pose)!;
|
||||||
var currentPose = await _dalamudUtilService.RunOnFrameworkThread(() => _brioGetPoseAsJson.InvokeFunc(gameObject)).ConfigureAwait(false);
|
var currentPose = await _dalamudUtilService.RunOnFrameworkThread(() => _getPoseAsJson.Invoke(gameObject)).ConfigureAwait(false);
|
||||||
applicablePose["ModelDifference"] = JsonNode.Parse(JsonNode.Parse(currentPose)!["ModelDifference"]!.ToJsonString());
|
applicablePose["ModelDifference"] = JsonNode.Parse(JsonNode.Parse(currentPose)!["ModelDifference"]!.ToJsonString());
|
||||||
|
|
||||||
await _dalamudUtilService.RunOnFrameworkThread(() =>
|
await _dalamudUtilService.RunOnFrameworkThread(() =>
|
||||||
{
|
{
|
||||||
_brioFreezeActor.InvokeFunc(gameObject);
|
_freezeActor.Invoke(gameObject);
|
||||||
_brioFreezePhysics.InvokeFunc();
|
_freezePhysics.Invoke();
|
||||||
}).ConfigureAwait(false);
|
}).ConfigureAwait(false);
|
||||||
return await _dalamudUtilService.RunOnFrameworkThread(() => _brioSetPoseFromJson.InvokeFunc(gameObject, applicablePose.ToJsonString(), false)).ConfigureAwait(false);
|
return await _dalamudUtilService.RunOnFrameworkThread(() => _setPoseFromJson.Invoke(gameObject, applicablePose.ToJsonString(), false)).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override IpcConnectionState EvaluateState()
|
protected override IpcConnectionState EvaluateState()
|
||||||
@@ -139,8 +143,8 @@ public sealed class IpcCallerBrio : IpcServiceBase
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var version = _brioApiVersion.InvokeFunc();
|
var version = _apiVersion.Invoke();
|
||||||
return version.Item1 == 2 && version.Item2 >= 0
|
return version.Item1 == 3 && version.Item2 >= 0
|
||||||
? IpcConnectionState.Available
|
? IpcConnectionState.Available
|
||||||
: IpcConnectionState.VersionMismatch;
|
: IpcConnectionState.VersionMismatch;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project Sdk="Dalamud.NET.Sdk/13.1.0">
|
<Project Sdk="Dalamud.NET.Sdk/14.0.0">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors></Authors>
|
<Authors></Authors>
|
||||||
<Company></Company>
|
<Company></Company>
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net9.0-windows7.0</TargetFramework>
|
<TargetFramework>net10.0-windows7.0</TargetFramework>
|
||||||
<Platforms>x64</Platforms>
|
<Platforms>x64</Platforms>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
@@ -28,16 +28,17 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Blake3" Version="2.0.0" />
|
<PackageReference Include="Blake3" Version="2.0.0" />
|
||||||
|
<PackageReference Include="Brio.API" Version="3.0.0" />
|
||||||
<PackageReference Include="Downloader" Version="4.0.3" />
|
<PackageReference Include="Downloader" Version="4.0.3" />
|
||||||
<PackageReference Include="K4os.Compression.LZ4.Legacy" Version="1.3.8" />
|
<PackageReference Include="K4os.Compression.LZ4.Legacy" Version="1.3.8" />
|
||||||
<PackageReference Include="Meziantou.Analyzer" Version="2.0.212">
|
<PackageReference Include="Meziantou.Analyzer" Version="2.0.212">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="9.0.3" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="10.0.1" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="9.0.3" />
|
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.MessagePack" Version="10.0.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.3" />
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.1" />
|
||||||
<PackageReference Include="Glamourer.Api" Version="2.6.0" />
|
<PackageReference Include="Glamourer.Api" Version="2.8.0" />
|
||||||
<PackageReference Include="NReco.Logging.File" Version="1.2.2" />
|
<PackageReference Include="NReco.Logging.File" Version="1.2.2" />
|
||||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.11" />
|
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.11" />
|
||||||
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.7.0.110445">
|
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.7.0.110445">
|
||||||
@@ -96,4 +97,8 @@
|
|||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Update="DalamudPackager" Version="14.0.1" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using LightlessSync.Services.Mediator;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using static FFXIVClientStructs.FFXIV.Client.Game.Character.DrawDataContainer;
|
using static FFXIVClientStructs.FFXIV.Client.Game.Character.DrawDataContainer;
|
||||||
|
using VisibilityFlags = FFXIVClientStructs.FFXIV.Client.Game.Object.VisibilityFlags;
|
||||||
using ObjectKind = LightlessSync.API.Data.Enum.ObjectKind;
|
using ObjectKind = LightlessSync.API.Data.Enum.ObjectKind;
|
||||||
|
|
||||||
namespace LightlessSync.PlayerData.Handlers;
|
namespace LightlessSync.PlayerData.Handlers;
|
||||||
@@ -376,8 +377,8 @@ public sealed class GameObjectHandler : DisposableMediatorSubscriberBase, IHighP
|
|||||||
{
|
{
|
||||||
if (Address == IntPtr.Zero) return DrawCondition.ObjectZero;
|
if (Address == IntPtr.Zero) return DrawCondition.ObjectZero;
|
||||||
if (DrawObjectAddress == IntPtr.Zero) return DrawCondition.DrawObjectZero;
|
if (DrawObjectAddress == IntPtr.Zero) return DrawCondition.DrawObjectZero;
|
||||||
var renderFlags = (((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)Address)->RenderFlags) != 0x0;
|
var visibilityFlags = ((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)Address)->RenderFlags;
|
||||||
if (renderFlags) return DrawCondition.RenderFlags;
|
if (visibilityFlags != VisibilityFlags.None) return DrawCondition.RenderFlags;
|
||||||
|
|
||||||
if (ObjectKind == ObjectKind.Player)
|
if (ObjectKind == ObjectKind.Player)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -783,7 +783,7 @@ public sealed class ActorObjectService : IHostedService, IDisposable
|
|||||||
if (drawObject == null)
|
if (drawObject == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (gameObject->RenderFlags == 2048)
|
if ((gameObject->RenderFlags & VisibilityFlags.Nameplate) != VisibilityFlags.None)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
var characterBase = (CharacterBase*)drawObject;
|
var characterBase = (CharacterBase*)drawObject;
|
||||||
|
|||||||
@@ -3,10 +3,21 @@ using LightlessSync.API.Dto.Chat;
|
|||||||
namespace LightlessSync.Services.Chat;
|
namespace LightlessSync.Services.Chat;
|
||||||
|
|
||||||
public sealed record ChatMessageEntry(
|
public sealed record ChatMessageEntry(
|
||||||
ChatMessageDto Payload,
|
ChatMessageDto? Payload,
|
||||||
string DisplayName,
|
string DisplayName,
|
||||||
bool FromSelf,
|
bool FromSelf,
|
||||||
DateTime ReceivedAtUtc);
|
DateTime ReceivedAtUtc,
|
||||||
|
ChatSystemEntry? SystemMessage = null)
|
||||||
|
{
|
||||||
|
public bool IsSystem => SystemMessage is not null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum ChatSystemEntryType
|
||||||
|
{
|
||||||
|
ZoneSeparator
|
||||||
|
}
|
||||||
|
|
||||||
|
public sealed record ChatSystemEntry(ChatSystemEntryType Type, string? ZoneName);
|
||||||
|
|
||||||
public readonly record struct ChatChannelSnapshot(
|
public readonly record struct ChatChannelSnapshot(
|
||||||
string Key,
|
string Key,
|
||||||
|
|||||||
@@ -240,8 +240,22 @@ public sealed class ZoneChatService : DisposableMediatorSubscriberBase, IHostedS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<ChatParticipantResolveResultDto?> ResolveParticipantAsync(ChatChannelDescriptor descriptor, string token)
|
public async Task<bool> SetParticipantMuteAsync(ChatChannelDescriptor descriptor, string token, bool mute)
|
||||||
=> _apiController.ResolveChatParticipant(new ChatParticipantResolveRequestDto(descriptor, token));
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(token))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await _apiController.SetChatParticipantMute(new ChatParticipantMuteRequestDto(descriptor, token, mute)).ConfigureAwait(false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Logger.LogWarning(ex, "Failed to update chat participant mute state");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Task<ChatReportResult> ReportMessageAsync(ChatChannelDescriptor descriptor, string messageId, string reason, string? additionalContext)
|
public Task<ChatReportResult> ReportMessageAsync(ChatChannelDescriptor descriptor, string messageId, string reason, string? additionalContext)
|
||||||
{
|
{
|
||||||
@@ -534,6 +548,7 @@ public sealed class ZoneChatService : DisposableMediatorSubscriberBase, IHostedS
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool shouldForceSend;
|
bool shouldForceSend;
|
||||||
|
ChatMessageEntry? zoneSeparatorEntry = null;
|
||||||
|
|
||||||
using (_sync.EnterScope())
|
using (_sync.EnterScope())
|
||||||
{
|
{
|
||||||
@@ -544,11 +559,24 @@ public sealed class ZoneChatService : DisposableMediatorSubscriberBase, IHostedS
|
|||||||
state.IsAvailable = _chatEnabled;
|
state.IsAvailable = _chatEnabled;
|
||||||
state.StatusText = _chatEnabled ? null : "Chat services disabled";
|
state.StatusText = _chatEnabled ? null : "Chat services disabled";
|
||||||
|
|
||||||
|
var previousDescriptor = _lastZoneDescriptor;
|
||||||
|
var zoneChanged = previousDescriptor.HasValue && !ChannelDescriptorsMatch(previousDescriptor.Value, descriptor.Value);
|
||||||
|
|
||||||
_activeChannelKey = ZoneChannelKey;
|
_activeChannelKey = ZoneChannelKey;
|
||||||
shouldForceSend = force || !_lastZoneDescriptor.HasValue || !ChannelDescriptorsMatch(_lastZoneDescriptor.Value, descriptor.Value);
|
shouldForceSend = force || !previousDescriptor.HasValue || zoneChanged;
|
||||||
|
if (zoneChanged && state.Messages.Any(m => !m.IsSystem))
|
||||||
|
{
|
||||||
|
zoneSeparatorEntry = AddZoneSeparatorLocked(state, definition.Value.DisplayName);
|
||||||
|
}
|
||||||
|
|
||||||
_lastZoneDescriptor = descriptor;
|
_lastZoneDescriptor = descriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (zoneSeparatorEntry is not null)
|
||||||
|
{
|
||||||
|
Mediator.Publish(new ChatChannelMessageAdded(ZoneChannelKey, zoneSeparatorEntry));
|
||||||
|
}
|
||||||
|
|
||||||
PublishChannelListChanged();
|
PublishChannelListChanged();
|
||||||
await SendPresenceAsync(descriptor.Value, territoryId, isActive: true, force: shouldForceSend).ConfigureAwait(false);
|
await SendPresenceAsync(descriptor.Value, territoryId, isActive: true, force: shouldForceSend).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
@@ -561,7 +589,6 @@ public sealed class ZoneChatService : DisposableMediatorSubscriberBase, IHostedS
|
|||||||
private async Task LeaveCurrentZoneAsync(bool force, ushort territoryId)
|
private async Task LeaveCurrentZoneAsync(bool force, ushort territoryId)
|
||||||
{
|
{
|
||||||
ChatChannelDescriptor? descriptor = null;
|
ChatChannelDescriptor? descriptor = null;
|
||||||
bool clearedHistory = false;
|
|
||||||
|
|
||||||
using (_sync.EnterScope())
|
using (_sync.EnterScope())
|
||||||
{
|
{
|
||||||
@@ -570,15 +597,6 @@ public sealed class ZoneChatService : DisposableMediatorSubscriberBase, IHostedS
|
|||||||
|
|
||||||
if (_channels.TryGetValue(ZoneChannelKey, out var state))
|
if (_channels.TryGetValue(ZoneChannelKey, out var state))
|
||||||
{
|
{
|
||||||
if (state.Messages.Count > 0)
|
|
||||||
{
|
|
||||||
state.Messages.Clear();
|
|
||||||
state.HasUnread = false;
|
|
||||||
state.UnreadCount = 0;
|
|
||||||
_lastReadCounts[ZoneChannelKey] = 0;
|
|
||||||
clearedHistory = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
state.IsConnected = _isConnected;
|
state.IsConnected = _isConnected;
|
||||||
state.IsAvailable = false;
|
state.IsAvailable = false;
|
||||||
state.StatusText = !_chatEnabled
|
state.StatusText = !_chatEnabled
|
||||||
@@ -593,11 +611,6 @@ public sealed class ZoneChatService : DisposableMediatorSubscriberBase, IHostedS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clearedHistory)
|
|
||||||
{
|
|
||||||
PublishHistoryCleared(ZoneChannelKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
PublishChannelListChanged();
|
PublishChannelListChanged();
|
||||||
|
|
||||||
if (descriptor.HasValue)
|
if (descriptor.HasValue)
|
||||||
@@ -1007,6 +1020,39 @@ public sealed class ZoneChatService : DisposableMediatorSubscriberBase, IHostedS
|
|||||||
return new ChatMessageEntry(dto, displayName, fromSelf, DateTime.UtcNow);
|
return new ChatMessageEntry(dto, displayName, fromSelf, DateTime.UtcNow);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ChatMessageEntry AddZoneSeparatorLocked(ChatChannelState state, string zoneDisplayName)
|
||||||
|
{
|
||||||
|
var separator = new ChatMessageEntry(
|
||||||
|
null,
|
||||||
|
string.Empty,
|
||||||
|
false,
|
||||||
|
DateTime.UtcNow,
|
||||||
|
new ChatSystemEntry(ChatSystemEntryType.ZoneSeparator, zoneDisplayName));
|
||||||
|
|
||||||
|
state.Messages.Add(separator);
|
||||||
|
if (state.Messages.Count > MaxMessageHistory)
|
||||||
|
{
|
||||||
|
state.Messages.RemoveAt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.Equals(_activeChannelKey, ZoneChannelKey, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
state.HasUnread = false;
|
||||||
|
state.UnreadCount = 0;
|
||||||
|
_lastReadCounts[ZoneChannelKey] = state.Messages.Count;
|
||||||
|
}
|
||||||
|
else if (_lastReadCounts.TryGetValue(ZoneChannelKey, out var readCount))
|
||||||
|
{
|
||||||
|
_lastReadCounts[ZoneChannelKey] = readCount + 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_lastReadCounts[ZoneChannelKey] = state.Messages.Count;
|
||||||
|
}
|
||||||
|
|
||||||
|
return separator;
|
||||||
|
}
|
||||||
|
|
||||||
private string ResolveDisplayName(ChatMessageDto dto, bool fromSelf)
|
private string ResolveDisplayName(ChatMessageDto dto, bool fromSelf)
|
||||||
{
|
{
|
||||||
var isZone = dto.Channel.Type == ChatChannelType.Zone;
|
var isZone = dto.Channel.Type == ChatChannelType.Zone;
|
||||||
@@ -1070,8 +1116,6 @@ public sealed class ZoneChatService : DisposableMediatorSubscriberBase, IHostedS
|
|||||||
|
|
||||||
private void PublishChannelListChanged() => Mediator.Publish(new ChatChannelsUpdated());
|
private void PublishChannelListChanged() => Mediator.Publish(new ChatChannelsUpdated());
|
||||||
|
|
||||||
private void PublishHistoryCleared(string channelKey) => Mediator.Publish(new ChatChannelHistoryCleared(channelKey));
|
|
||||||
|
|
||||||
private static IEnumerable<string> EnumerateTerritoryKeys(string? value)
|
private static IEnumerable<string> EnumerateTerritoryKeys(string? value)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(value))
|
if (string.IsNullOrWhiteSpace(value))
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ using System.Runtime.CompilerServices;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using DalamudObjectKind = Dalamud.Game.ClientState.Objects.Enums.ObjectKind;
|
using DalamudObjectKind = Dalamud.Game.ClientState.Objects.Enums.ObjectKind;
|
||||||
using GameObject = FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject;
|
using GameObject = FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject;
|
||||||
|
using VisibilityFlags = FFXIVClientStructs.FFXIV.Client.Game.Object.VisibilityFlags;
|
||||||
|
|
||||||
namespace LightlessSync.Services;
|
namespace LightlessSync.Services;
|
||||||
|
|
||||||
@@ -707,7 +708,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber
|
|||||||
const int tick = 250;
|
const int tick = 250;
|
||||||
int curWaitTime = 0;
|
int curWaitTime = 0;
|
||||||
_logger.LogTrace("RenderFlags: {flags}", obj->RenderFlags.ToString("X"));
|
_logger.LogTrace("RenderFlags: {flags}", obj->RenderFlags.ToString("X"));
|
||||||
while (obj->RenderFlags != 0x00 && curWaitTime < timeOut)
|
while (obj->RenderFlags != VisibilityFlags.None && curWaitTime < timeOut)
|
||||||
{
|
{
|
||||||
_logger.LogTrace($"Waiting for gpose actor to finish drawing");
|
_logger.LogTrace($"Waiting for gpose actor to finish drawing");
|
||||||
curWaitTime += tick;
|
curWaitTime += tick;
|
||||||
@@ -752,7 +753,7 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber
|
|||||||
bool isDrawingChanged = false;
|
bool isDrawingChanged = false;
|
||||||
if ((nint)drawObj != IntPtr.Zero)
|
if ((nint)drawObj != IntPtr.Zero)
|
||||||
{
|
{
|
||||||
isDrawing = gameObj->RenderFlags == 0b100000000000;
|
isDrawing = (gameObj->RenderFlags & VisibilityFlags.Nameplate) != VisibilityFlags.None;
|
||||||
if (!isDrawing)
|
if (!isDrawing)
|
||||||
{
|
{
|
||||||
isDrawing = ((CharacterBase*)drawObj)->HasModelInSlotLoaded != 0;
|
isDrawing = ((CharacterBase*)drawObj)->HasModelInSlotLoaded != 0;
|
||||||
|
|||||||
@@ -133,7 +133,6 @@ public record PairDownloadStatusMessage(List<(string PlayerName, float Progress,
|
|||||||
public record VisibilityChange : MessageBase;
|
public record VisibilityChange : MessageBase;
|
||||||
public record ChatChannelsUpdated : MessageBase;
|
public record ChatChannelsUpdated : MessageBase;
|
||||||
public record ChatChannelMessageAdded(string ChannelKey, ChatMessageEntry Message) : MessageBase;
|
public record ChatChannelMessageAdded(string ChannelKey, ChatMessageEntry Message) : MessageBase;
|
||||||
public record ChatChannelHistoryCleared(string ChannelKey) : MessageBase;
|
|
||||||
public record GroupCollectionChangedMessage : MessageBase;
|
public record GroupCollectionChangedMessage : MessageBase;
|
||||||
public record OpenUserProfileMessage(UserData User) : MessageBase;
|
public record OpenUserProfileMessage(UserData User) : MessageBase;
|
||||||
#pragma warning restore S2094
|
#pragma warning restore S2094
|
||||||
|
|||||||
@@ -327,7 +327,12 @@ public class LightlessProfileManager : MediatorSubscriberBase
|
|||||||
if (profile == null)
|
if (profile == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var userData = profile.User;
|
if (profile.User is null)
|
||||||
|
{
|
||||||
|
Logger.LogWarning("Lightfinder profile response missing user info for CID {HashedCid}", hashedCid);
|
||||||
|
}
|
||||||
|
|
||||||
|
var userData = profile.User ?? new UserData(hashedCid, Alias: "Lightfinder User");
|
||||||
var profileTags = profile.Tags ?? _emptyTagSet;
|
var profileTags = profile.Tags ?? _emptyTagSet;
|
||||||
var profileData = BuildProfileData(userData, profile, profileTags);
|
var profileData = BuildProfileData(userData, profile, profileTags);
|
||||||
_lightlessProfiles[userData] = profileData;
|
_lightlessProfiles[userData] = profileData;
|
||||||
|
|||||||
@@ -146,6 +146,8 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
|||||||
if (string.IsNullOrEmpty(hashedCid))
|
if (string.IsNullOrEmpty(hashedCid))
|
||||||
return LightfinderDisplayName;
|
return LightfinderDisplayName;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
var (name, address) = dalamudUtilService.FindPlayerByNameHash(hashedCid);
|
var (name, address) = dalamudUtilService.FindPlayerByNameHash(hashedCid);
|
||||||
if (string.IsNullOrEmpty(name))
|
if (string.IsNullOrEmpty(name))
|
||||||
return LightfinderDisplayName;
|
return LightfinderDisplayName;
|
||||||
@@ -153,6 +155,11 @@ public class StandaloneProfileUi : WindowMediatorSubscriberBase
|
|||||||
var world = dalamudUtilService.GetWorldNameFromPlayerAddress(address);
|
var world = dalamudUtilService.GetWorldNameFromPlayerAddress(address);
|
||||||
return string.IsNullOrEmpty(world) ? name : $"{name} ({world})";
|
return string.IsNullOrEmpty(world) ? name : $"{name} ({world})";
|
||||||
}
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return LightfinderDisplayName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected override void DrawInternal()
|
protected override void DrawInternal()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -95,13 +95,6 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
.Apply();
|
.Apply();
|
||||||
|
|
||||||
Mediator.Subscribe<ChatChannelMessageAdded>(this, OnChatChannelMessageAdded);
|
Mediator.Subscribe<ChatChannelMessageAdded>(this, OnChatChannelMessageAdded);
|
||||||
Mediator.Subscribe<ChatChannelHistoryCleared>(this, msg =>
|
|
||||||
{
|
|
||||||
if (_selectedChannelKey is not null && string.Equals(_selectedChannelKey, msg.ChannelKey, StringComparison.Ordinal))
|
|
||||||
{
|
|
||||||
_scrollToBottom = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Mediator.Subscribe<ChatChannelsUpdated>(this, _ => _scrollToBottom = true);
|
Mediator.Subscribe<ChatChannelsUpdated>(this, _ => _scrollToBottom = true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -250,6 +243,21 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
for (var i = 0; i < channel.Messages.Count; i++)
|
for (var i = 0; i < channel.Messages.Count; i++)
|
||||||
{
|
{
|
||||||
var message = channel.Messages[i];
|
var message = channel.Messages[i];
|
||||||
|
ImGui.PushID(i);
|
||||||
|
|
||||||
|
if (message.IsSystem)
|
||||||
|
{
|
||||||
|
DrawSystemEntry(message);
|
||||||
|
ImGui.PopID();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message.Payload is not { } payload)
|
||||||
|
{
|
||||||
|
ImGui.PopID();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
var timestampText = string.Empty;
|
var timestampText = string.Empty;
|
||||||
if (showTimestamps)
|
if (showTimestamps)
|
||||||
{
|
{
|
||||||
@@ -257,24 +265,21 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
var color = message.FromSelf ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudWhite;
|
var color = message.FromSelf ? UIColors.Get("LightlessBlue") : ImGuiColors.DalamudWhite;
|
||||||
|
|
||||||
ImGui.PushID(i);
|
|
||||||
ImGui.PushStyleColor(ImGuiCol.Text, color);
|
ImGui.PushStyleColor(ImGuiCol.Text, color);
|
||||||
ImGui.TextWrapped($"{timestampText}{message.DisplayName}: {message.Payload.Message}");
|
ImGui.TextWrapped($"{timestampText}{message.DisplayName}: {payload.Message}");
|
||||||
ImGui.PopStyleColor();
|
ImGui.PopStyleColor();
|
||||||
|
|
||||||
if (ImGui.BeginPopupContextItem($"chat_msg_ctx##{channel.Key}_{i}"))
|
if (ImGui.BeginPopupContextItem($"chat_msg_ctx##{channel.Key}_{i}"))
|
||||||
{
|
{
|
||||||
var contextLocalTimestamp = message.Payload.SentAtUtc.ToLocalTime();
|
var contextLocalTimestamp = payload.SentAtUtc.ToLocalTime();
|
||||||
var contextTimestampText = contextLocalTimestamp.ToString("yyyy-MM-dd HH:mm:ss 'UTC'z", CultureInfo.InvariantCulture);
|
var contextTimestampText = contextLocalTimestamp.ToString("yyyy-MM-dd HH:mm:ss 'UTC'z", CultureInfo.InvariantCulture);
|
||||||
ImGui.TextDisabled(contextTimestampText);
|
ImGui.TextDisabled(contextTimestampText);
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
|
|
||||||
|
var actionIndex = 0;
|
||||||
foreach (var action in GetContextMenuActions(channel, message))
|
foreach (var action in GetContextMenuActions(channel, message))
|
||||||
{
|
{
|
||||||
if (ImGui.MenuItem(action.Label, string.Empty, false, action.IsEnabled))
|
DrawContextMenuAction(action, actionIndex++);
|
||||||
{
|
|
||||||
action.Execute();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.EndPopup();
|
ImGui.EndPopup();
|
||||||
@@ -538,6 +543,13 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (message.Payload is not { } payload)
|
||||||
|
{
|
||||||
|
CloseReportPopup();
|
||||||
|
ImGui.EndPopup();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (_reportSubmissionResult is { } pendingResult)
|
if (_reportSubmissionResult is { } pendingResult)
|
||||||
{
|
{
|
||||||
_reportSubmissionResult = null;
|
_reportSubmissionResult = null;
|
||||||
@@ -563,11 +575,11 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
|
|
||||||
ImGui.TextUnformatted(channelLabel);
|
ImGui.TextUnformatted(channelLabel);
|
||||||
ImGui.TextUnformatted($"Sender: {message.DisplayName}");
|
ImGui.TextUnformatted($"Sender: {message.DisplayName}");
|
||||||
ImGui.TextUnformatted($"Sent: {message.Payload.SentAtUtc.ToLocalTime().ToString("g", CultureInfo.CurrentCulture)}");
|
ImGui.TextUnformatted($"Sent: {payload.SentAtUtc.ToLocalTime().ToString("g", CultureInfo.CurrentCulture)}");
|
||||||
|
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
ImGui.PushTextWrapPos(ImGui.GetWindowContentRegionMax().X);
|
ImGui.PushTextWrapPos(ImGui.GetWindowContentRegionMax().X);
|
||||||
ImGui.TextWrapped(message.Payload.Message);
|
ImGui.TextWrapped(payload.Message);
|
||||||
ImGui.PopTextWrapPos();
|
ImGui.PopTextWrapPos();
|
||||||
ImGui.Separator();
|
ImGui.Separator();
|
||||||
|
|
||||||
@@ -633,9 +645,15 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
|
|
||||||
private void OpenReportPopup(ChatChannelSnapshot channel, ChatMessageEntry message)
|
private void OpenReportPopup(ChatChannelSnapshot channel, ChatMessageEntry message)
|
||||||
{
|
{
|
||||||
|
if (message.Payload is not { } payload)
|
||||||
|
{
|
||||||
|
_logger.LogDebug("Ignoring report popup request for non-message entry in {ChannelKey}", channel.Key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_reportTargetChannel = channel;
|
_reportTargetChannel = channel;
|
||||||
_reportTargetMessage = message;
|
_reportTargetMessage = message;
|
||||||
_logger.LogDebug("Opening report popup for channel {ChannelKey}, message {MessageId}", channel.Key, message.Payload.MessageId);
|
_logger.LogDebug("Opening report popup for channel {ChannelKey}, message {MessageId}", channel.Key, payload.MessageId);
|
||||||
_reportReason = string.Empty;
|
_reportReason = string.Empty;
|
||||||
_reportAdditionalContext = string.Empty;
|
_reportAdditionalContext = string.Empty;
|
||||||
_reportError = null;
|
_reportError = null;
|
||||||
@@ -650,6 +668,12 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
if (_reportSubmitting)
|
if (_reportSubmitting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (message.Payload is not { } payload)
|
||||||
|
{
|
||||||
|
_reportError = "Unable to report this message.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var trimmedReason = _reportReason.Trim();
|
var trimmedReason = _reportReason.Trim();
|
||||||
if (trimmedReason.Length == 0)
|
if (trimmedReason.Length == 0)
|
||||||
{
|
{
|
||||||
@@ -666,7 +690,7 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
_reportSubmissionResult = null;
|
_reportSubmissionResult = null;
|
||||||
|
|
||||||
var descriptor = channel.Descriptor;
|
var descriptor = channel.Descriptor;
|
||||||
var messageId = message.Payload.MessageId;
|
var messageId = payload.MessageId;
|
||||||
if (string.IsNullOrWhiteSpace(messageId))
|
if (string.IsNullOrWhiteSpace(messageId))
|
||||||
{
|
{
|
||||||
_reportSubmitting = false;
|
_reportSubmitting = false;
|
||||||
@@ -743,25 +767,33 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
|
|
||||||
private IEnumerable<ChatMessageContextAction> GetContextMenuActions(ChatChannelSnapshot channel, ChatMessageEntry message)
|
private IEnumerable<ChatMessageContextAction> GetContextMenuActions(ChatChannelSnapshot channel, ChatMessageEntry message)
|
||||||
{
|
{
|
||||||
if (TryCreateCopyMessageAction(message, out var copyAction))
|
if (message.IsSystem || message.Payload is not { } payload)
|
||||||
|
yield break;
|
||||||
|
|
||||||
|
if (TryCreateCopyMessageAction(message, payload, out var copyAction))
|
||||||
{
|
{
|
||||||
yield return copyAction;
|
yield return copyAction;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryCreateViewProfileAction(channel, message, out var viewProfile))
|
if (TryCreateViewProfileAction(channel, message, payload, out var viewProfile))
|
||||||
{
|
{
|
||||||
yield return viewProfile;
|
yield return viewProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TryCreateReportMessageAction(channel, message, out var reportAction))
|
if (TryCreateMuteParticipantAction(channel, message, payload, out var muteAction))
|
||||||
|
{
|
||||||
|
yield return muteAction;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TryCreateReportMessageAction(channel, message, payload, out var reportAction))
|
||||||
{
|
{
|
||||||
yield return reportAction;
|
yield return reportAction;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool TryCreateCopyMessageAction(ChatMessageEntry message, out ChatMessageContextAction action)
|
private static bool TryCreateCopyMessageAction(ChatMessageEntry message, ChatMessageDto payload, out ChatMessageContextAction action)
|
||||||
{
|
{
|
||||||
var text = message.Payload.Message;
|
var text = payload.Message;
|
||||||
if (string.IsNullOrEmpty(text))
|
if (string.IsNullOrEmpty(text))
|
||||||
{
|
{
|
||||||
action = default;
|
action = default;
|
||||||
@@ -769,20 +801,21 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
action = new ChatMessageContextAction(
|
action = new ChatMessageContextAction(
|
||||||
|
FontAwesomeIcon.Clipboard,
|
||||||
"Copy Message",
|
"Copy Message",
|
||||||
true,
|
true,
|
||||||
() => ImGui.SetClipboardText(text));
|
() => ImGui.SetClipboardText(text));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryCreateViewProfileAction(ChatChannelSnapshot channel, ChatMessageEntry message, out ChatMessageContextAction action)
|
private bool TryCreateViewProfileAction(ChatChannelSnapshot channel, ChatMessageEntry message, ChatMessageDto payload, out ChatMessageContextAction action)
|
||||||
{
|
{
|
||||||
action = default;
|
action = default;
|
||||||
switch (channel.Type)
|
switch (channel.Type)
|
||||||
{
|
{
|
||||||
case ChatChannelType.Group:
|
case ChatChannelType.Group:
|
||||||
{
|
{
|
||||||
var user = message.Payload.Sender.User;
|
var user = payload.Sender.User;
|
||||||
if (user?.UID is not { Length: > 0 })
|
if (user?.UID is not { Length: > 0 })
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -790,6 +823,7 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
if (snapshot.PairsByUid.TryGetValue(user.UID, out var pair) && pair is not null)
|
if (snapshot.PairsByUid.TryGetValue(user.UID, out var pair) && pair is not null)
|
||||||
{
|
{
|
||||||
action = new ChatMessageContextAction(
|
action = new ChatMessageContextAction(
|
||||||
|
FontAwesomeIcon.User,
|
||||||
"View Profile",
|
"View Profile",
|
||||||
true,
|
true,
|
||||||
() => Mediator.Publish(new ProfileOpenStandaloneMessage(pair)));
|
() => Mediator.Publish(new ProfileOpenStandaloneMessage(pair)));
|
||||||
@@ -797,41 +831,64 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
action = new ChatMessageContextAction(
|
action = new ChatMessageContextAction(
|
||||||
|
FontAwesomeIcon.User,
|
||||||
"View Profile",
|
"View Profile",
|
||||||
true,
|
true,
|
||||||
() => RunContextAction(() => OpenStandardProfileAsync(user)));
|
() => RunContextAction(() => OpenStandardProfileAsync(user)));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case ChatChannelType.Zone:
|
case ChatChannelType.Zone:
|
||||||
if (!message.Payload.Sender.CanResolveProfile)
|
if (!payload.Sender.CanResolveProfile)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(message.Payload.Sender.Token))
|
var hashedCid = payload.Sender.HashedCid;
|
||||||
|
if (string.IsNullOrEmpty(hashedCid))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
action = new ChatMessageContextAction(
|
action = new ChatMessageContextAction(
|
||||||
|
FontAwesomeIcon.User,
|
||||||
"View Profile",
|
"View Profile",
|
||||||
true,
|
true,
|
||||||
() => RunContextAction(() => OpenZoneParticipantProfileAsync(channel.Descriptor, message.Payload.Sender.Token)));
|
() => RunContextAction(() => OpenLightfinderProfileInternalAsync(hashedCid)));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool TryCreateReportMessageAction(ChatChannelSnapshot channel, ChatMessageEntry message, out ChatMessageContextAction action)
|
private bool TryCreateMuteParticipantAction(ChatChannelSnapshot channel, ChatMessageEntry message, ChatMessageDto payload, out ChatMessageContextAction action)
|
||||||
{
|
{
|
||||||
action = default;
|
action = default;
|
||||||
if (message.FromSelf)
|
if (message.FromSelf)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(message.Payload.MessageId))
|
if (string.IsNullOrEmpty(payload.Sender.Token))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
var safeName = string.IsNullOrWhiteSpace(message.DisplayName)
|
||||||
|
? "Participant"
|
||||||
|
: message.DisplayName;
|
||||||
|
|
||||||
|
action = new ChatMessageContextAction(
|
||||||
|
FontAwesomeIcon.VolumeMute,
|
||||||
|
$"Mute '{safeName}'",
|
||||||
|
true,
|
||||||
|
() => RunContextAction(() => _zoneChatService.SetParticipantMuteAsync(channel.Descriptor, payload.Sender.Token!, true)));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool TryCreateReportMessageAction(ChatChannelSnapshot channel, ChatMessageEntry message, ChatMessageDto payload, out ChatMessageContextAction action)
|
||||||
|
{
|
||||||
|
action = default;
|
||||||
|
if (message.FromSelf)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(payload.MessageId))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
action = new ChatMessageContextAction(
|
action = new ChatMessageContextAction(
|
||||||
|
FontAwesomeIcon.ExclamationTriangle,
|
||||||
"Report Message",
|
"Report Message",
|
||||||
true,
|
true,
|
||||||
() => OpenReportPopup(channel, message));
|
() => OpenReportPopup(channel, message));
|
||||||
@@ -863,24 +920,12 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OpenZoneParticipantProfileAsync(ChatChannelDescriptor descriptor, string token)
|
private void OnChatChannelMessageAdded(ChatChannelMessageAdded message)
|
||||||
{
|
{
|
||||||
var result = await _zoneChatService.ResolveParticipantAsync(descriptor, token).ConfigureAwait(false);
|
if (_selectedChannelKey is not null && string.Equals(_selectedChannelKey, message.ChannelKey, StringComparison.Ordinal))
|
||||||
if (result is null)
|
|
||||||
{
|
{
|
||||||
Mediator.Publish(new NotificationMessage("Zone Chat", "Participant is no longer available.", NotificationType.Warning, TimeSpan.FromSeconds(3)));
|
_scrollToBottom = true;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var resolved = result.Value;
|
|
||||||
var hashedCid = resolved.Sender.HashedCid;
|
|
||||||
if (string.IsNullOrEmpty(hashedCid))
|
|
||||||
{
|
|
||||||
Mediator.Publish(new NotificationMessage("Zone Chat", "This participant remains anonymous.", NotificationType.Warning, TimeSpan.FromSeconds(3)));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await OpenLightfinderProfileInternalAsync(hashedCid).ConfigureAwait(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OpenLightfinderProfileInternalAsync(string hashedCid)
|
private async Task OpenLightfinderProfileInternalAsync(string hashedCid)
|
||||||
@@ -901,14 +946,6 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
Mediator.Publish(new OpenLightfinderProfileMessage(sanitizedUser, profile.Value.ProfileData, hashedCid));
|
Mediator.Publish(new OpenLightfinderProfileMessage(sanitizedUser, profile.Value.ProfileData, hashedCid));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnChatChannelMessageAdded(ChatChannelMessageAdded message)
|
|
||||||
{
|
|
||||||
if (_selectedChannelKey is not null && string.Equals(_selectedChannelKey, message.ChannelKey, StringComparison.Ordinal))
|
|
||||||
{
|
|
||||||
_scrollToBottom = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void EnsureSelectedChannel(IReadOnlyList<ChatChannelSnapshot> channels)
|
private void EnsureSelectedChannel(IReadOnlyList<ChatChannelSnapshot> channels)
|
||||||
{
|
{
|
||||||
if (_selectedChannelKey is not null && channels.Any(channel => string.Equals(channel.Key, _selectedChannelKey, StringComparison.Ordinal)))
|
if (_selectedChannelKey is not null && channels.Any(channel => string.Equals(channel.Key, _selectedChannelKey, StringComparison.Ordinal)))
|
||||||
@@ -1374,5 +1411,86 @@ public sealed class ZoneChatUi : WindowMediatorSubscriberBase
|
|||||||
ImGui.SetCursorPosY(ImGui.GetCursorPosY() - style.ItemSpacing.Y * 0.3f);
|
ImGui.SetCursorPosY(ImGui.GetCursorPosY() - style.ItemSpacing.Y * 0.3f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly record struct ChatMessageContextAction(string Label, bool IsEnabled, Action Execute);
|
private void DrawSystemEntry(ChatMessageEntry entry)
|
||||||
|
{
|
||||||
|
var system = entry.SystemMessage;
|
||||||
|
if (system is null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (system.Type)
|
||||||
|
{
|
||||||
|
case ChatSystemEntryType.ZoneSeparator:
|
||||||
|
DrawZoneSeparatorEntry(system, entry.ReceivedAtUtc);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawZoneSeparatorEntry(ChatSystemEntry systemEntry, DateTime timestampUtc)
|
||||||
|
{
|
||||||
|
ImGui.Spacing();
|
||||||
|
|
||||||
|
var zoneName = string.IsNullOrWhiteSpace(systemEntry.ZoneName) ? "Zone" : systemEntry.ZoneName;
|
||||||
|
var localTime = timestampUtc.ToLocalTime();
|
||||||
|
var label = $"{localTime.ToString("HH:mm", CultureInfo.CurrentCulture)} - {zoneName}";
|
||||||
|
var availableWidth = ImGui.GetContentRegionAvail().X;
|
||||||
|
var textSize = ImGui.CalcTextSize(label);
|
||||||
|
var cursor = ImGui.GetCursorPos();
|
||||||
|
var textPosX = cursor.X + MathF.Max(0f, (availableWidth - textSize.X) * 0.5f);
|
||||||
|
|
||||||
|
ImGui.SetCursorPos(new Vector2(textPosX, cursor.Y));
|
||||||
|
ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudGrey2);
|
||||||
|
ImGui.TextUnformatted(label);
|
||||||
|
ImGui.PopStyleColor();
|
||||||
|
|
||||||
|
var nextY = ImGui.GetCursorPosY() + ImGui.GetStyle().ItemSpacing.Y * 0.35f;
|
||||||
|
ImGui.SetCursorPos(new Vector2(cursor.X, nextY));
|
||||||
|
ImGui.Separator();
|
||||||
|
ImGui.Spacing();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DrawContextMenuAction(ChatMessageContextAction action, int index)
|
||||||
|
{
|
||||||
|
ImGui.PushID(index);
|
||||||
|
using var disabled = ImRaii.Disabled(!action.IsEnabled);
|
||||||
|
|
||||||
|
var availableWidth = Math.Max(1f, ImGui.GetContentRegionAvail().X);
|
||||||
|
var clicked = ImGui.Selectable("##chat_ctx_action", false, ImGuiSelectableFlags.None, new Vector2(availableWidth, 0f));
|
||||||
|
|
||||||
|
var drawList = ImGui.GetWindowDrawList();
|
||||||
|
var itemMin = ImGui.GetItemRectMin();
|
||||||
|
var itemMax = ImGui.GetItemRectMax();
|
||||||
|
var itemHeight = itemMax.Y - itemMin.Y;
|
||||||
|
var style = ImGui.GetStyle();
|
||||||
|
var textColor = ImGui.GetColorU32(action.IsEnabled ? ImGuiCol.Text : ImGuiCol.TextDisabled);
|
||||||
|
|
||||||
|
var textSize = ImGui.CalcTextSize(action.Label);
|
||||||
|
var textPos = new Vector2(itemMin.X + style.FramePadding.X, itemMin.Y + (itemHeight - textSize.Y) * 0.5f);
|
||||||
|
|
||||||
|
if (action.Icon.HasValue)
|
||||||
|
{
|
||||||
|
var iconSize = _uiSharedService.GetIconSize(action.Icon.Value);
|
||||||
|
var iconPos = new Vector2(
|
||||||
|
itemMin.X + style.FramePadding.X,
|
||||||
|
itemMin.Y + (itemHeight - iconSize.Y) * 0.5f);
|
||||||
|
|
||||||
|
using (_uiSharedService.IconFont.Push())
|
||||||
|
{
|
||||||
|
drawList.AddText(iconPos, textColor, action.Icon.Value.ToIconString());
|
||||||
|
}
|
||||||
|
|
||||||
|
textPos.X = iconPos.X + iconSize.X + style.ItemSpacing.X;
|
||||||
|
}
|
||||||
|
|
||||||
|
drawList.AddText(textPos, textColor, action.Label);
|
||||||
|
|
||||||
|
if (clicked && action.IsEnabled)
|
||||||
|
{
|
||||||
|
ImGui.CloseCurrentPopup();
|
||||||
|
action.Execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui.PopID();
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly record struct ChatMessageContextAction(FontAwesomeIcon? Icon, string Label, bool IsEnabled, Action Execute);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,21 +1,15 @@
|
|||||||
using Dalamud.Bindings.ImGui;
|
using Dalamud.Bindings.ImGui;
|
||||||
using Dalamud.Game.Text.SeStringHandling;
|
using Dalamud.Game.Text.SeStringHandling;
|
||||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
|
||||||
using Dalamud.Interface;
|
using Dalamud.Interface;
|
||||||
using Dalamud.Interface.ImGuiSeStringRenderer;
|
using Dalamud.Interface.ImGuiSeStringRenderer;
|
||||||
using Dalamud.Interface.Utility;
|
|
||||||
using Dalamud.Interface.Textures.TextureWraps;
|
using Dalamud.Interface.Textures.TextureWraps;
|
||||||
using Lumina.Text;
|
using Dalamud.Interface.Utility;
|
||||||
using Lumina.Text.Parse;
|
using Lumina.Text.Parse;
|
||||||
using Lumina.Text.ReadOnly;
|
using Lumina.Text.ReadOnly;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
|
||||||
using System.Numerics;
|
using System.Numerics;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
|
||||||
using DalamudSeString = Dalamud.Game.Text.SeStringHandling.SeString;
|
using DalamudSeString = Dalamud.Game.Text.SeStringHandling.SeString;
|
||||||
using DalamudSeStringBuilder = Dalamud.Game.Text.SeStringHandling.SeStringBuilder;
|
using DalamudSeStringBuilder = Dalamud.Game.Text.SeStringHandling.SeStringBuilder;
|
||||||
using LuminaSeStringBuilder = Lumina.Text.SeStringBuilder;
|
using LuminaSeStringBuilder = Lumina.Text.SeStringBuilder;
|
||||||
@@ -58,7 +52,7 @@ public static class SeStringUtils
|
|||||||
Color = ImGui.GetColorU32(ImGuiCol.Text),
|
Color = ImGui.GetColorU32(ImGuiCol.Text),
|
||||||
};
|
};
|
||||||
|
|
||||||
var renderId = ImGui.GetID($"SeStringMarkup##{normalizedPayload.GetHashCode()}");
|
var renderId = ImGui.GetID($"SeStringMarkup##{normalizedPayload.GetHashCode(StringComparison.Ordinal)}");
|
||||||
var drawResult = ImGuiHelpers.CompileSeStringWrapped(normalizedPayload, drawParams, renderId);
|
var drawResult = ImGuiHelpers.CompileSeStringWrapped(normalizedPayload, drawParams, renderId);
|
||||||
var height = drawResult.Size.Y;
|
var height = drawResult.Size.Y;
|
||||||
if (height <= 0f)
|
if (height <= 0f)
|
||||||
@@ -382,7 +376,7 @@ public static class SeStringUtils
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
return Uri.TryCreate(value, UriKind.Absolute, out var uri)
|
return Uri.TryCreate(value, UriKind.Absolute, out var uri)
|
||||||
&& (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps);
|
&& (string.Equals(uri.Scheme, Uri.UriSchemeHttp, StringComparison.Ordinal) || string.Equals(uri.Scheme, Uri.UriSchemeHttps, StringComparison.Ordinal));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string StripMarkup(string value)
|
public static string StripMarkup(string value)
|
||||||
@@ -545,12 +539,15 @@ public static class SeStringUtils
|
|||||||
{
|
{
|
||||||
drawList ??= ImGui.GetWindowDrawList();
|
drawList ??= ImGui.GetWindowDrawList();
|
||||||
|
|
||||||
|
var usedFont = font ?? ImGui.GetFont();
|
||||||
var drawParams = new SeStringDrawParams
|
var drawParams = new SeStringDrawParams
|
||||||
{
|
{
|
||||||
Font = font ?? ImGui.GetFont(),
|
Font = usedFont,
|
||||||
|
FontSize = usedFont.FontSize,
|
||||||
Color = ImGui.GetColorU32(ImGuiCol.Text),
|
Color = ImGui.GetColorU32(ImGuiCol.Text),
|
||||||
WrapWidth = wrapWidth,
|
WrapWidth = wrapWidth,
|
||||||
TargetDrawList = drawList
|
TargetDrawList = drawList,
|
||||||
|
ScreenOffset = ImGui.GetCursorScreenPos()
|
||||||
};
|
};
|
||||||
|
|
||||||
ImGuiHelpers.SeStringWrapped(seString.Encode(), drawParams);
|
ImGuiHelpers.SeStringWrapped(seString.Encode(), drawParams);
|
||||||
@@ -588,6 +585,11 @@ public static class SeStringUtils
|
|||||||
|
|
||||||
var drawPos = new Vector2(position.X, position.Y + verticalOffset);
|
var drawPos = new Vector2(position.X, position.Y + verticalOffset);
|
||||||
ImGui.SetCursorScreenPos(drawPos);
|
ImGui.SetCursorScreenPos(drawPos);
|
||||||
|
|
||||||
|
drawParams.ScreenOffset = drawPos;
|
||||||
|
drawParams.Font = usedFont;
|
||||||
|
drawParams.FontSize = usedFont.FontSize;
|
||||||
|
|
||||||
ImGuiHelpers.SeStringWrapped(seString.Encode(), drawParams);
|
ImGuiHelpers.SeStringWrapped(seString.Encode(), drawParams);
|
||||||
|
|
||||||
ImGui.SetCursorScreenPos(position);
|
ImGui.SetCursorScreenPos(position);
|
||||||
@@ -621,6 +623,7 @@ public static class SeStringUtils
|
|||||||
var measureParams = new SeStringDrawParams
|
var measureParams = new SeStringDrawParams
|
||||||
{
|
{
|
||||||
Font = usedFont,
|
Font = usedFont,
|
||||||
|
FontSize = usedFont.FontSize,
|
||||||
Color = 0xFFFFFFFF,
|
Color = 0xFFFFFFFF,
|
||||||
WrapWidth = float.MaxValue
|
WrapWidth = float.MaxValue
|
||||||
};
|
};
|
||||||
@@ -642,6 +645,7 @@ public static class SeStringUtils
|
|||||||
var drawParams = new SeStringDrawParams
|
var drawParams = new SeStringDrawParams
|
||||||
{
|
{
|
||||||
Font = usedFont,
|
Font = usedFont,
|
||||||
|
FontSize = usedFont.FontSize,
|
||||||
Color = 0xFFFFFFFF,
|
Color = 0xFFFFFFFF,
|
||||||
WrapWidth = float.MaxValue,
|
WrapWidth = float.MaxValue,
|
||||||
TargetDrawList = drawList,
|
TargetDrawList = drawList,
|
||||||
|
|||||||
@@ -60,12 +60,11 @@ public partial class ApiController
|
|||||||
await _lightlessHub.InvokeAsync(nameof(ReportChatMessage), request).ConfigureAwait(false);
|
await _lightlessHub.InvokeAsync(nameof(ReportChatMessage), request).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ChatParticipantResolveResultDto?> ResolveChatParticipant(ChatParticipantResolveRequestDto request)
|
public async Task SetChatParticipantMute(ChatParticipantMuteRequestDto request)
|
||||||
{
|
{
|
||||||
if (!IsConnected || _lightlessHub is null) return null;
|
if (!IsConnected || _lightlessHub is null) return;
|
||||||
return await _lightlessHub.InvokeAsync<ChatParticipantResolveResultDto?>(nameof(ResolveChatParticipant), request).ConfigureAwait(false);
|
await _lightlessHub.InvokeAsync(nameof(SetChatParticipantMute), request).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SetBroadcastStatus(bool enabled, GroupBroadcastRequestDto? groupDto = null)
|
public async Task SetBroadcastStatus(bool enabled, GroupBroadcastRequestDto? groupDto = null)
|
||||||
{
|
{
|
||||||
CheckConnection();
|
CheckConnection();
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
using System;
|
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Dalamud.Utility;
|
using Dalamud.Utility;
|
||||||
using LightlessSync.API.Data;
|
using LightlessSync.API.Data;
|
||||||
using LightlessSync.API.Data.Extensions;
|
using LightlessSync.API.Data.Extensions;
|
||||||
using LightlessSync.API.Dto;
|
using LightlessSync.API.Dto;
|
||||||
using LightlessSync.API.Dto.Chat;
|
using LightlessSync.API.Dto.Chat;
|
||||||
using LightlessSync.API.Dto.Group;
|
|
||||||
using LightlessSync.API.Dto.Chat;
|
|
||||||
using LightlessSync.API.Dto.User;
|
using LightlessSync.API.Dto.User;
|
||||||
using LightlessSync.API.SignalR;
|
using LightlessSync.API.SignalR;
|
||||||
using LightlessSync.LightlessConfiguration;
|
using LightlessSync.LightlessConfiguration;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
2
OtterGui
2
OtterGui
Submodule OtterGui updated: 1459e2b8f5...ff1e654384
Submodule Penumbra.Api updated: 66a11d4c88...1750c41b53
Submodule Penumbra.GameData updated: 1bb6210d7c...0e973ed6ea
Submodule Penumbra.String updated: 462afac558...9bd016fbef
@@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 1,
|
|
||||||
"dependencies": {
|
|
||||||
"net9.0-windows7.0": {
|
|
||||||
"DotNet.ReproducibleBuilds": {
|
|
||||||
"type": "Direct",
|
|
||||||
"requested": "[1.2.25, )",
|
|
||||||
"resolved": "1.2.25",
|
|
||||||
"contentHash": "xCXiw7BCxHJ8pF6wPepRUddlh2dlQlbr81gXA72hdk4FLHkKXas7EH/n+fk5UCA/YfMqG1Z6XaPiUjDbUNBUzg=="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,970 +0,0 @@
|
|||||||
{
|
|
||||||
"version": 1,
|
|
||||||
"dependencies": {
|
|
||||||
"net9.0-windows7.0": {
|
|
||||||
"DotNet.ReproducibleBuilds": {
|
|
||||||
"type": "Direct",
|
|
||||||
"requested": "[1.2.25, )",
|
|
||||||
"resolved": "1.2.25",
|
|
||||||
"contentHash": "xCXiw7BCxHJ8pF6wPepRUddlh2dlQlbr81gXA72hdk4FLHkKXas7EH/n+fk5UCA/YfMqG1Z6XaPiUjDbUNBUzg=="
|
|
||||||
},
|
|
||||||
"SharpDX.D3DCompiler": {
|
|
||||||
"type": "Direct",
|
|
||||||
"requested": "[4.2.0, )",
|
|
||||||
"resolved": "4.2.0",
|
|
||||||
"contentHash": "Rnsd6Ilp127xbXqhTit8WKFQUrXwWxqVGpglyWDNkIBCk0tWXNQEjrJpsl0KAObzyZaa33+EXAikLVt5fnd3GA==",
|
|
||||||
"dependencies": {
|
|
||||||
"NETStandard.Library": "1.6.1",
|
|
||||||
"SharpDX": "4.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SharpDX.Direct2D1": {
|
|
||||||
"type": "Direct",
|
|
||||||
"requested": "[4.2.0, )",
|
|
||||||
"resolved": "4.2.0",
|
|
||||||
"contentHash": "Qs8LzDMaQf1u3KB8ArHu9pDv6itZ++QXs99a/bVAG+nKr0Hx5NG4mcN5vsfE0mVR2TkeHfeUm4PksRah6VUPtA==",
|
|
||||||
"dependencies": {
|
|
||||||
"NETStandard.Library": "1.6.1",
|
|
||||||
"SharpDX": "4.2.0",
|
|
||||||
"SharpDX.DXGI": "4.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SharpDX.Direct3D11": {
|
|
||||||
"type": "Direct",
|
|
||||||
"requested": "[4.2.0, )",
|
|
||||||
"resolved": "4.2.0",
|
|
||||||
"contentHash": "oTm/iT5X/IIuJ8kNYP+DTC/MhBhqtRF5dbgPPFgLBdQv0BKzNTzXQQXd7SveBFjQg6hXEAJ2jGCAzNYvGFc9LA==",
|
|
||||||
"dependencies": {
|
|
||||||
"NETStandard.Library": "1.6.1",
|
|
||||||
"SharpDX": "4.2.0",
|
|
||||||
"SharpDX.DXGI": "4.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SharpDX.Mathematics": {
|
|
||||||
"type": "Direct",
|
|
||||||
"requested": "[4.2.0, )",
|
|
||||||
"resolved": "4.2.0",
|
|
||||||
"contentHash": "R2pcKLgdsP9p5WyTjHmGOZ0ka0zASAZYc6P4L6rSvjYhf6klGYbent7MiVwbkwkt9dD44p5brjy5IwAnVONWGw==",
|
|
||||||
"dependencies": {
|
|
||||||
"NETStandard.Library": "1.6.1",
|
|
||||||
"SharpDX": "4.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Microsoft.NETCore.Platforms": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "1.1.0",
|
|
||||||
"contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
|
|
||||||
},
|
|
||||||
"Microsoft.NETCore.Targets": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "1.1.0",
|
|
||||||
"contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
|
|
||||||
},
|
|
||||||
"Microsoft.Win32.Primitives": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "9ZQKCWxH7Ijp9BfahvL2Zyf1cJIk8XYLF6Yjzr2yi0b2cOut/HQ31qf1ThHAgCc3WiZMdnWcfJCgN82/0UunxA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"NETStandard.Library": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "1.6.1",
|
|
||||||
"contentHash": "WcSp3+vP+yHNgS8EV5J7pZ9IRpeDuARBPN28by8zqff1wJQXm26PVU8L3/fYLBJVU7BtDyqNVWq2KlCVvSSR4A==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.Win32.Primitives": "4.3.0",
|
|
||||||
"System.AppContext": "4.3.0",
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Collections.Concurrent": "4.3.0",
|
|
||||||
"System.Console": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Diagnostics.Tools": "4.3.0",
|
|
||||||
"System.Diagnostics.Tracing": "4.3.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.Globalization.Calendars": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.IO.Compression": "4.3.0",
|
|
||||||
"System.IO.Compression.ZipFile": "4.3.0",
|
|
||||||
"System.IO.FileSystem": "4.3.0",
|
|
||||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
|
||||||
"System.Linq": "4.3.0",
|
|
||||||
"System.Linq.Expressions": "4.3.0",
|
|
||||||
"System.Net.Http": "4.3.0",
|
|
||||||
"System.Net.Primitives": "4.3.0",
|
|
||||||
"System.Net.Sockets": "4.3.0",
|
|
||||||
"System.ObjectModel": "4.3.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Reflection.Extensions": "4.3.0",
|
|
||||||
"System.Reflection.Primitives": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices.RuntimeInformation": "4.3.0",
|
|
||||||
"System.Runtime.Numerics": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
|
||||||
"System.Security.Cryptography.X509Certificates": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Text.Encoding.Extensions": "4.3.0",
|
|
||||||
"System.Text.RegularExpressions": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0",
|
|
||||||
"System.Threading.Timer": "4.3.0",
|
|
||||||
"System.Xml.ReaderWriter": "4.3.0",
|
|
||||||
"System.Xml.XDocument": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q=="
|
|
||||||
},
|
|
||||||
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "+yH1a49wJMy8Zt4yx5RhJrxO/DBDByAiCzNwiETI+1S4mPdCu0OY4djdciC7Vssk0l22wQaDLrXxXkp+3+7bVA=="
|
|
||||||
},
|
|
||||||
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "c3YNH1GQJbfIPJeCnr4avseugSqPrxwIqzthYyZDN6EuOyNOzq+y2KSUfRcXauya1sF4foESTgwM5e1A8arAKw=="
|
|
||||||
},
|
|
||||||
"runtime.native.System": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "c/qWt2LieNZIj1jGnVNsE2Kl23Ya2aSTBuXMD6V7k9KWr6l16Tqdwq+hJScEpWER9753NWC8h96PaVNY5Ld7Jw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime.native.System.IO.Compression": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "INBPonS5QPEgn7naufQFXJEp3zX6L4bwHgJ/ZH78aBTpeNfQMtf7C6VrAFhlq2xxWBveIOWyFzQjJ8XzHMhdOQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime.native.System.Net.Http": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "ZVuZJqnnegJhd2k/PtAbbIcZ3aZeITq3sj06oKfMBSfphW3HDmk/t4ObvbOk/JA/swGR0LNqMksAh/f7gpTROg==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime.native.System.Security.Cryptography.Apple": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "DloMk88juo0OuOWr56QG7MNchmafTLYWvABy36izkrLI5VledI0rq28KGs1i9wbpeT9NPQrx/wTf8U2vazqQ3Q==",
|
|
||||||
"dependencies": {
|
|
||||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "NS1U+700m4KFRHR5o4vo9DSlTmlCKu/u7dtE5sUHVIPB+xpXxYQvgBgA6wEIeCz6Yfn0Z52/72WYsToCEPJnrw==",
|
|
||||||
"dependencies": {
|
|
||||||
"runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "b3pthNgxxFcD+Pc0WSEoC0+md3MyhRS6aCEeenvNE3Fdw1HyJ18ZhRFVJJzIeR/O/jpxPboB805Ho0T3Ul7w8A=="
|
|
||||||
},
|
|
||||||
"runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "KeLz4HClKf+nFS7p/6Fi/CqyLXh81FpiGzcmuS8DGi9lUqSnZ6Es23/gv2O+1XVGfrbNmviF7CckBpavkBoIFQ=="
|
|
||||||
},
|
|
||||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "kVXCuMTrTlxq4XOOMAysuNwsXWpYeboGddNGpIgNSZmv1b6r/s/DPk0fYMB7Q5Qo4bY68o48jt4T4y5BVecbCQ=="
|
|
||||||
},
|
|
||||||
"runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "X7IdhILzr4ROXd8mI1BUCQMSHSQwelUlBjF1JyTKCjXaOGn2fB4EKBxQbCK2VjO3WaWIdlXZL3W6TiIVnrhX4g=="
|
|
||||||
},
|
|
||||||
"runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "nyFNiCk/r+VOiIqreLix8yN+q3Wga9+SE8BCgkf+2BwEKiNx6DyvFjCgkfV743/grxv8jHJ8gUK4XEQw7yzRYg=="
|
|
||||||
},
|
|
||||||
"runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "ytoewC6wGorL7KoCAvRfsgoJPJbNq+64k2SqW6JcOAebWsFUvCCYgfzQMrnpvPiEl4OrblUlhF2ji+Q1+SVLrQ=="
|
|
||||||
},
|
|
||||||
"runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "I8bKw2I8k58Wx7fMKQJn2R8lamboCAiHfHeV/pS65ScKWMMI0+wJkLYlEKvgW1D/XvSl/221clBoR2q9QNNM7A=="
|
|
||||||
},
|
|
||||||
"runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "VB5cn/7OzUfzdnC8tqAIMQciVLiq2epm2NrAm1E9OjNRyG4lVhfR61SMcLizejzQP8R8Uf/0l5qOIbUEi+RdEg=="
|
|
||||||
},
|
|
||||||
"SharpDX": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.2.0",
|
|
||||||
"contentHash": "3pv0LFMvfK/dv1qISJnn8xBeeT6R/FRvr0EV4KI2DGsL84Qlv6P7isWqxGyU0LCwlSVCJN3jgHJ4Bl0KI2PJww==",
|
|
||||||
"dependencies": {
|
|
||||||
"NETStandard.Library": "1.6.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SharpDX.DXGI": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.2.0",
|
|
||||||
"contentHash": "UjKqkgWc8U+SP+j3LBzFP6OB6Ntapjih7Xo+g1rLcsGbIb5KwewBrBChaUu7sil8rWoeVU/k0EJd3SMN4VqNZw==",
|
|
||||||
"dependencies": {
|
|
||||||
"NETStandard.Library": "1.6.1",
|
|
||||||
"SharpDX": "4.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.AppContext": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "fKC+rmaLfeIzUhagxY17Q9siv/sPrjjKcfNg1Ic8IlQkZLipo8ljcaZQu4VtI4Jqbzjc2VTjzGLF6WmsRXAEgA==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Buffers": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "ratu44uTIHgeBeI0dE8DWvmXVBSo4u7ozRZZHOMmK/JPpYyo0dAfgSiHlpiObMQ5lEtEyIXA40sKRYg5J6A8uQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Diagnostics.Tracing": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Collections": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Collections.Concurrent": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "ztl69Xp0Y/UXCL+3v3tEU+lIy+bvjKNUmopn1wep/a291pVPK7dxBd6T7WnlQqRog+d1a/hSsgRsmFnIBKTPLQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Diagnostics.Tracing": "4.3.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Console": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "DHDrIxiqk1h03m6khKWV2X8p/uvN79rgSqpilL6uzpmSfxfU5ng8VcPtW4qsDsQDHiTv6IPV9TmD5M/vElPNLg==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Diagnostics.Debug": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "ZUhUOdqmaG5Jk3Xdb8xi5kIyQYAA4PnTNlHx1mu9ZY3qv4ELIdKbnL/akbGaKi2RnNUWaZsAs31rvzFdewTj2g==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Diagnostics.DiagnosticSource": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "tD6kosZnTAGdrEa0tZSuFyunMbt/5KYDnHdndJYGqZoNy00XVXyACd5d6KnE1YgYv3ne2CjtAfNXo/fwEhnKUA==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Tracing": "4.3.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Diagnostics.Tools": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "UUvkJfSYJMM6x527dJg2VyWPSRqIVB0Z7dbjHst1zmwTXz5CcXSYJFWRpuigfbO1Lf7yfZiIaEUesfnl/g5EyA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Diagnostics.Tracing": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "rswfv0f/Cqkh78rA5S8eN8Neocz234+emGCtTF3lxPY96F+mmmUen6tbn0glN6PMvlKQb9bPAY5e9u7fgPTkKw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Globalization": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Globalization.Calendars": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "GUlBtdOWT4LTV3I+9/PJW+56AnnChTaOqqTLFtdmype/L500M2LIyXgmtd9X2P2VOkmJd5c67H5SaC2QcL1bFA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Globalization.Extensions": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "FhKmdR6MPG+pxow6wGtNAWdZh7noIOpdD5TwQ3CprzgIE1bBBoim0vbR1+AWsWjQmU7zXHgQo4TWSP6lCeiWcQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.IO": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.IO.Compression": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "YHndyoiV90iu4iKG115ibkhrG+S3jBm8Ap9OwoUAzO5oPDAWcr0SFwQFm0HjM8WkEZWo0zvLTyLmbvTkW1bXgg==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"System.Buffers": "4.3.0",
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0",
|
|
||||||
"runtime.native.System": "4.3.0",
|
|
||||||
"runtime.native.System.IO.Compression": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.IO.Compression.ZipFile": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "G4HwjEsgIwy3JFBduZ9quBkAu+eUwjIdJleuNSgmUojbH6O3mlvEIme+GHx/cLlTAPcrnnL7GqvB9pTlWRfhOg==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Buffers": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.IO.Compression": "4.3.0",
|
|
||||||
"System.IO.FileSystem": "4.3.0",
|
|
||||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.IO.FileSystem": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "3wEMARTnuio+ulnvi+hkRNROYwa1kylvYahhcLk4HSoVdl+xxTFVeVlYOfLwrDPImGls0mDqbMhrza8qnWPTdA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.IO.FileSystem.Primitives": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "6QOb2XFLch7bEc4lIcJH49nJN2HV+OC3fHDgsLVsBVBk3Y4hFAnOBGzJ2lUu7CyDDFo9IBWkSsnbkT6IBwwiMw==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Linq": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "5DbqIUpsDp0dFftytzuMmc0oeMdQwjcP/EWxsksIz/w1TcFRkZ3yKKz0PqiYFMmEwPSWw+qNVqD7PJ889JzHbw==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Linq.Expressions": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "PGKkrd2khG4CnlyJwxwwaWWiSiWFNBGlgXvJpeO0xCXrZ89ODrQ6tjEWS/kOqZ8GwEOUATtKtzp1eRgmYNfclg==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Linq": "4.3.0",
|
|
||||||
"System.ObjectModel": "4.3.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Reflection.Emit": "4.3.0",
|
|
||||||
"System.Reflection.Emit.ILGeneration": "4.3.0",
|
|
||||||
"System.Reflection.Emit.Lightweight": "4.3.0",
|
|
||||||
"System.Reflection.Extensions": "4.3.0",
|
|
||||||
"System.Reflection.Primitives": "4.3.0",
|
|
||||||
"System.Reflection.TypeExtensions": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Net.Http": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "sYg+FtILtRQuYWSIAuNOELwVuVsxVyJGWQyOnlAzhV4xvhyFnON1bAzYYC+jjRW8JREM45R0R5Dgi8MTC5sEwA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Diagnostics.DiagnosticSource": "4.3.0",
|
|
||||||
"System.Diagnostics.Tracing": "4.3.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.Globalization.Extensions": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.IO.FileSystem": "4.3.0",
|
|
||||||
"System.Net.Primitives": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
|
||||||
"System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
|
||||||
"System.Security.Cryptography.X509Certificates": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0",
|
|
||||||
"runtime.native.System": "4.3.0",
|
|
||||||
"runtime.native.System.Net.Http": "4.3.0",
|
|
||||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Net.Primitives": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "qOu+hDwFwoZPbzPvwut2qATe3ygjeQBDQj91xlsaqGFQUI5i4ZnZb8yyQuLGpDGivEPIt8EJkd1BVzVoP31FXA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Net.Sockets": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "m6icV6TqQOAdgt5N/9I5KNpjom/5NFtkmGseEH+AK/hny8XrytLH3+b5M8zL/Ycg3fhIocFpUMyl/wpFnVRvdw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Net.Primitives": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.ObjectModel": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "bdX+80eKv9bN6K4N+d77OankKHGn6CH711a6fcOpMQu2Fckp/Ft4L/kW9WznHpyR0NRAvJutzOMHNNlBGvxQzQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Reflection": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Reflection.Primitives": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Reflection.Emit": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "228FG0jLcIwTVJyz8CLFKueVqQK36ANazUManGaJHkO0icjiIypKW7YLWLIWahyIkdh5M7mV2dJepllLyA1SKg==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Reflection.Emit.ILGeneration": "4.3.0",
|
|
||||||
"System.Reflection.Primitives": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Reflection.Emit.ILGeneration": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "59tBslAk9733NXLrUJrwNZEzbMAcu8k344OYo+wfSVygcgZ9lgBdGIzH/nrg3LYhXceynyvTc8t5/GD4Ri0/ng==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Reflection.Primitives": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Reflection.Emit.Lightweight": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "oadVHGSMsTmZsAF864QYN1t1QzZjIcuKU3l2S9cZOwDdDueNTrqq1yRj7koFfIGEnKpt6NjpL3rOzRhs4ryOgA==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Reflection.Emit.ILGeneration": "4.3.0",
|
|
||||||
"System.Reflection.Primitives": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Reflection.Extensions": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "rJkrJD3kBI5B712aRu4DpSIiHRtr6QlfZSQsb0hYHrDCZORXCFjQfoipo2LaMUHoT9i1B7j7MnfaEKWDFmFQNQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Reflection.Primitives": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Reflection.TypeExtensions": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "7u6ulLcZbyxB5Gq0nMkQttcdBTx57ibzw+4IOXEfR+sXYQoHvjW5LTLyNr8O22UIMrqYbchJQJnos4eooYzYJA==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Resources.ResourceManager": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Runtime": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Runtime.Extensions": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Runtime.Handles": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Runtime.InteropServices": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Reflection.Primitives": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Runtime.InteropServices.RuntimeInformation": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "cbz4YJMqRDR7oLeMRbdYv7mYzc++17lNhScCX0goO2XpGWdvAt60CGN+FHdePUEHCe/Jy9jUlvNAiNdM+7jsOw==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Reflection.Extensions": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0",
|
|
||||||
"runtime.native.System": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Runtime.Numerics": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "yMH+MfdzHjy17l2KESnPiF2dwq7T+xLnSJar7slyimAkUh/gTrS9/UQOtv7xarskJ2/XDSNvfLGOBQPjL7PaHQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Security.Cryptography.Algorithms": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "W1kd2Y8mYSCgc3ULTAZ0hOP2dSdG5YauTb1089T0/kRcN2MpSAW1izOFROrJgxSlMn3ArsgHXagigyi+ibhevg==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Runtime.Numerics": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"runtime.native.System.Security.Cryptography.Apple": "4.3.0",
|
|
||||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Security.Cryptography.Cng": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "03idZOqFlsKRL4W+LuCpJ6dBYDUWReug6lZjBa3uJWnk5sPCUXckocevTaUA8iT/MFSrY/2HXkOt753xQ/cf8g==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Security.Cryptography.Csp": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "X4s/FCkEUnRGnwR3aSfVIkldBmtURMhmexALNTwpjklzxWU7yjMk7GHLKOZTNkgnWnE0q7+BCf9N2LVRWxewaA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Security.Cryptography.Encoding": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "1DEWjZZly9ae9C79vFwqaO5kaOlI5q+3/55ohmq/7dpDyDfc8lYe7YVxJUZ5MF/NtbkRjwFRo14yM4OEo9EmDw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Collections.Concurrent": "4.3.0",
|
|
||||||
"System.Linq": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Security.Cryptography.OpenSsl": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "h4CEgOgv5PKVF/HwaHzJRiVboL2THYCou97zpmhjghx5frc7fIvlkY1jL+lnIQyChrJDMNEXS6r7byGif8Cy4w==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Runtime.Numerics": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Security.Cryptography.Primitives": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "7bDIyVFNL/xKeFHjhobUAQqSpJq9YTOpbEs6mR233Et01STBMXNAc/V+BM6dwYGc95gVh/Zf+iVXWzj3mE8DWg==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Security.Cryptography.X509Certificates": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "t2Tmu6Y2NtJ2um0RtcuhP7ZdNNxXEgUm2JeoA/0NvlMjAhKCnM1NX07TDl3244mVp3QU6LPEhT3HTtH1uF7IYw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.Globalization.Calendars": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.IO.FileSystem": "4.3.0",
|
|
||||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.Handles": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Runtime.Numerics": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Algorithms": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Cng": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Csp": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Encoding": "4.3.0",
|
|
||||||
"System.Security.Cryptography.OpenSsl": "4.3.0",
|
|
||||||
"System.Security.Cryptography.Primitives": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0",
|
|
||||||
"runtime.native.System": "4.3.0",
|
|
||||||
"runtime.native.System.Net.Http": "4.3.0",
|
|
||||||
"runtime.native.System.Security.Cryptography.OpenSsl": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Text.Encoding": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Text.Encoding.Extensions": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "YVMK0Bt/A43RmwizJoZ22ei2nmrhobgeiYwFzC4YAN+nue8RF6djXDMog0UCn+brerQoYVyaS+ghy9P/MUVcmw==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Text.RegularExpressions": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "RpT2DA+L660cBt1FssIE9CAGpLFdFPuheB7pLpKpn6ZXNby7jDERe8Ua/Ne2xGiwLVG2JOqziiaVCGDon5sKFA==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Threading": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "VkUS0kOBcUf3Wwm0TSbrevDDZ6BlM+b/HRiapRFWjM5O0NS0LviG0glKmFK+hhPDd1XFeSdU1GmlLhb2CoVpIw==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Threading.Tasks": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Threading.Tasks.Extensions": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "npvJkVKl5rKXrtl1Kkm6OhOUaYGEiF9wFbppFRWSMoApKzt2PiPHT2Bb8a5sAWxprvdOAtvaARS9QYMznEUtug==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Threading.Timer": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "Z6YfyYTCg7lOZjJzBjONJTFKGN9/NIYKSxhU5GRd+DTwHSZyvWp1xuI5aR+dLg+ayyC5Xv57KiY4oJ0tMO89fQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"Microsoft.NETCore.Platforms": "1.1.0",
|
|
||||||
"Microsoft.NETCore.Targets": "1.1.0",
|
|
||||||
"System.Runtime": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Xml.ReaderWriter": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "GrprA+Z0RUXaR4N7/eW71j1rgMnEnEVlgii49GZyAjTH7uliMnrOU3HNFBr6fEDBCJCIdlVNq9hHbaDR621XBA==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.IO.FileSystem": "4.3.0",
|
|
||||||
"System.IO.FileSystem.Primitives": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Runtime.InteropServices": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Text.Encoding.Extensions": "4.3.0",
|
|
||||||
"System.Text.RegularExpressions": "4.3.0",
|
|
||||||
"System.Threading.Tasks": "4.3.0",
|
|
||||||
"System.Threading.Tasks.Extensions": "4.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"System.Xml.XDocument": {
|
|
||||||
"type": "Transitive",
|
|
||||||
"resolved": "4.3.0",
|
|
||||||
"contentHash": "5zJ0XDxAIg8iy+t4aMnQAu0MqVbqyvfoUVl1yDV61xdo3Vth45oA2FoY4pPkxYAH5f8ixpmTqXeEIya95x0aCQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"System.Collections": "4.3.0",
|
|
||||||
"System.Diagnostics.Debug": "4.3.0",
|
|
||||||
"System.Diagnostics.Tools": "4.3.0",
|
|
||||||
"System.Globalization": "4.3.0",
|
|
||||||
"System.IO": "4.3.0",
|
|
||||||
"System.Reflection": "4.3.0",
|
|
||||||
"System.Resources.ResourceManager": "4.3.0",
|
|
||||||
"System.Runtime": "4.3.0",
|
|
||||||
"System.Runtime.Extensions": "4.3.0",
|
|
||||||
"System.Text.Encoding": "4.3.0",
|
|
||||||
"System.Threading": "4.3.0",
|
|
||||||
"System.Xml.ReaderWriter": "4.3.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Submodule ffxiv_pictomancy updated: 788bc339a6...66c96678a2
Reference in New Issue
Block a user