add warnings for missing optional plugins when respective data is received
This commit is contained in:
@@ -80,6 +80,7 @@ public class Configuration : IPluginConfiguration
|
|||||||
|
|
||||||
public bool FullPause { get; set; } = false;
|
public bool FullPause { get; set; } = false;
|
||||||
public bool HideInfoMessages { get; set; } = false;
|
public bool HideInfoMessages { get; set; } = false;
|
||||||
|
public bool DisableOptionalPluginWarnings { get; set; } = false;
|
||||||
public Dictionary<string, Dictionary<string, string>> UidServerComments { get; set; } = new(StringComparer.Ordinal);
|
public Dictionary<string, Dictionary<string, string>> UidServerComments { get; set; } = new(StringComparer.Ordinal);
|
||||||
public Dictionary<string, Dictionary<string, string>> GidServerComments { get; set; } = new(StringComparer.Ordinal);
|
public Dictionary<string, Dictionary<string, string>> GidServerComments { get; set; } = new(StringComparer.Ordinal);
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class CachedPlayer
|
|||||||
|
|
||||||
private PlayerRelatedObject? _currentCharacterEquipment;
|
private PlayerRelatedObject? _currentCharacterEquipment;
|
||||||
|
|
||||||
public void ApplyCharacterData(CharacterCacheDto characterData)
|
public void ApplyCharacterData(CharacterCacheDto characterData, OptionalPluginWarning warning)
|
||||||
{
|
{
|
||||||
Logger.Debug("Received data for " + this);
|
Logger.Debug("Received data for " + this);
|
||||||
|
|
||||||
@@ -122,6 +122,7 @@ public class CachedPlayer
|
|||||||
bool heelsOffsetDifferent = _cachedData.HeelsOffset != characterData.HeelsOffset;
|
bool heelsOffsetDifferent = _cachedData.HeelsOffset != characterData.HeelsOffset;
|
||||||
if (heelsOffsetDifferent)
|
if (heelsOffsetDifferent)
|
||||||
{
|
{
|
||||||
|
|
||||||
Logger.Debug("Updating " + objectKind);
|
Logger.Debug("Updating " + objectKind);
|
||||||
charaDataToUpdate.Add(objectKind);
|
charaDataToUpdate.Add(objectKind);
|
||||||
continue;
|
continue;
|
||||||
@@ -137,6 +138,23 @@ public class CachedPlayer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (characterData.HeelsOffset != default)
|
||||||
|
{
|
||||||
|
if (!warning.ShownHeelsWarning && !_ipcManager.CheckHeelsApi())
|
||||||
|
{
|
||||||
|
_dalamudUtil.PrintWarnChat("Received Heels data for player " + PlayerName + ", but Heels is not installed. Install Heels to experience their character fully.");
|
||||||
|
warning.ShownHeelsWarning = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrEmpty(characterData.CustomizePlusData))
|
||||||
|
{
|
||||||
|
if (!warning.ShownCustomizePlusWarning && !_ipcManager.CheckCustomizePlusApi())
|
||||||
|
{
|
||||||
|
_dalamudUtil.PrintWarnChat("Received Customize+ data for player " + PlayerName + ", but Customize+ is not installed. Install Customize+ to experience their character fully.");
|
||||||
|
warning.ShownCustomizePlusWarning = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_cachedData = characterData;
|
_cachedData = characterData;
|
||||||
|
|
||||||
DownloadAndApplyCharacter(charaDataToUpdate, updateModdedPaths);
|
DownloadAndApplyCharacter(charaDataToUpdate, updateModdedPaths);
|
||||||
@@ -418,7 +436,7 @@ public class CachedPlayer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitializePlayer(IntPtr character, string name, CharacterCacheDto? cache)
|
public void InitializePlayer(IntPtr character, string name, CharacterCacheDto? cache, OptionalPluginWarning displayedChatWarning)
|
||||||
{
|
{
|
||||||
if (!_isDisposed) return;
|
if (!_isDisposed) return;
|
||||||
IsVisible = true;
|
IsVisible = true;
|
||||||
@@ -434,7 +452,7 @@ public class CachedPlayer
|
|||||||
_isDisposed = false;
|
_isDisposed = false;
|
||||||
if (cache != null)
|
if (cache != null)
|
||||||
{
|
{
|
||||||
ApplyCharacterData(cache);
|
ApplyCharacterData(cache, displayedChatWarning);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Threading;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using MareSynchronos.API;
|
using MareSynchronos.API;
|
||||||
using MareSynchronos.FileCache;
|
using MareSynchronos.FileCache;
|
||||||
|
using MareSynchronos.Models;
|
||||||
using MareSynchronos.Utils;
|
using MareSynchronos.Utils;
|
||||||
using MareSynchronos.WebAPI;
|
using MareSynchronos.WebAPI;
|
||||||
using MareSynchronos.WebAPI.Utils;
|
using MareSynchronos.WebAPI.Utils;
|
||||||
@@ -19,14 +20,16 @@ public class OnlinePlayerManager : IDisposable
|
|||||||
private readonly IpcManager _ipcManager;
|
private readonly IpcManager _ipcManager;
|
||||||
private readonly PlayerManager _playerManager;
|
private readonly PlayerManager _playerManager;
|
||||||
private readonly FileCacheManager _fileDbManager;
|
private readonly FileCacheManager _fileDbManager;
|
||||||
|
private readonly Configuration _configuration;
|
||||||
private readonly ConcurrentDictionary<string, CachedPlayer> _onlineCachedPlayers = new(StringComparer.Ordinal);
|
private readonly ConcurrentDictionary<string, CachedPlayer> _onlineCachedPlayers = new(StringComparer.Ordinal);
|
||||||
private readonly ConcurrentDictionary<string, CharacterCacheDto> _temporaryStoredCharacterCache = new(StringComparer.Ordinal);
|
private readonly ConcurrentDictionary<string, CharacterCacheDto> _temporaryStoredCharacterCache = new(StringComparer.Ordinal);
|
||||||
private readonly ConcurrentDictionary<CachedPlayer, CancellationTokenSource> _playerTokenDisposal = new();
|
private readonly ConcurrentDictionary<CachedPlayer, CancellationTokenSource> _playerTokenDisposal = new();
|
||||||
|
private readonly ConcurrentDictionary<string, OptionalPluginWarning> _shownWarnings = new(StringComparer.Ordinal);
|
||||||
|
|
||||||
private List<string> OnlineVisiblePlayerHashes => _onlineCachedPlayers.Select(p => p.Value).Where(p => p.PlayerCharacter != IntPtr.Zero)
|
private List<string> OnlineVisiblePlayerHashes => _onlineCachedPlayers.Select(p => p.Value).Where(p => p.PlayerCharacter != IntPtr.Zero)
|
||||||
.Select(p => p.PlayerNameHash).ToList();
|
.Select(p => p.PlayerNameHash).ToList();
|
||||||
|
|
||||||
public OnlinePlayerManager(ApiController apiController, DalamudUtil dalamudUtil, IpcManager ipcManager, PlayerManager playerManager, FileCacheManager fileDbManager)
|
public OnlinePlayerManager(ApiController apiController, DalamudUtil dalamudUtil, IpcManager ipcManager, PlayerManager playerManager, FileCacheManager fileDbManager, Configuration configuration)
|
||||||
{
|
{
|
||||||
Logger.Verbose("Creating " + nameof(OnlinePlayerManager));
|
Logger.Verbose("Creating " + nameof(OnlinePlayerManager));
|
||||||
|
|
||||||
@@ -35,6 +38,7 @@ public class OnlinePlayerManager : IDisposable
|
|||||||
_ipcManager = ipcManager;
|
_ipcManager = ipcManager;
|
||||||
_playerManager = playerManager;
|
_playerManager = playerManager;
|
||||||
_fileDbManager = fileDbManager;
|
_fileDbManager = fileDbManager;
|
||||||
|
_configuration = configuration;
|
||||||
_apiController.PairedClientOnline += ApiControllerOnPairedClientOnline;
|
_apiController.PairedClientOnline += ApiControllerOnPairedClientOnline;
|
||||||
_apiController.PairedClientOffline += ApiControllerOnPairedClientOffline;
|
_apiController.PairedClientOffline += ApiControllerOnPairedClientOffline;
|
||||||
_apiController.Connected += ApiControllerOnConnected;
|
_apiController.Connected += ApiControllerOnConnected;
|
||||||
@@ -60,10 +64,15 @@ public class OnlinePlayerManager : IDisposable
|
|||||||
|
|
||||||
private void ApiControllerOnCharacterReceived(object? sender, CharacterReceivedEventArgs e)
|
private void ApiControllerOnCharacterReceived(object? sender, CharacterReceivedEventArgs e)
|
||||||
{
|
{
|
||||||
|
if (!_shownWarnings.ContainsKey(e.CharacterNameHash)) _shownWarnings[e.CharacterNameHash] = new()
|
||||||
|
{
|
||||||
|
ShownCustomizePlusWarning = _configuration.DisableOptionalPluginWarnings,
|
||||||
|
ShownHeelsWarning = _configuration.DisableOptionalPluginWarnings,
|
||||||
|
};
|
||||||
if (_onlineCachedPlayers.TryGetValue(e.CharacterNameHash, out var visiblePlayer) && visiblePlayer.IsVisible)
|
if (_onlineCachedPlayers.TryGetValue(e.CharacterNameHash, out var visiblePlayer) && visiblePlayer.IsVisible)
|
||||||
{
|
{
|
||||||
Logger.Debug("Received data and applying to " + e.CharacterNameHash);
|
Logger.Debug("Received data and applying to " + e.CharacterNameHash);
|
||||||
visiblePlayer.ApplyCharacterData(e.CharacterData);
|
visiblePlayer.ApplyCharacterData(e.CharacterData, _shownWarnings[e.CharacterNameHash]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -205,7 +214,12 @@ public class OnlinePlayerManager : IDisposable
|
|||||||
if (existingPlayer != null)
|
if (existingPlayer != null)
|
||||||
{
|
{
|
||||||
_temporaryStoredCharacterCache.TryRemove(hashedName, out var cache);
|
_temporaryStoredCharacterCache.TryRemove(hashedName, out var cache);
|
||||||
existingPlayer.InitializePlayer(pChar.Address, pChar.Name.ToString(), cache);
|
if (!_shownWarnings.ContainsKey(hashedName)) _shownWarnings[hashedName] = new()
|
||||||
|
{
|
||||||
|
ShownCustomizePlusWarning = _configuration.DisableOptionalPluginWarnings,
|
||||||
|
ShownHeelsWarning = _configuration.DisableOptionalPluginWarnings,
|
||||||
|
};
|
||||||
|
existingPlayer.InitializePlayer(pChar.Address, pChar.Name.ToString(), cache, _shownWarnings[hashedName]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors></Authors>
|
<Authors></Authors>
|
||||||
<Company></Company>
|
<Company></Company>
|
||||||
<Version>0.5.24</Version>
|
<Version>0.5.25</Version>
|
||||||
<Description></Description>
|
<Description></Description>
|
||||||
<Copyright></Copyright>
|
<Copyright></Copyright>
|
||||||
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/Penumbra-Sync/client</PackageProjectUrl>
|
||||||
|
|||||||
7
MareSynchronos/Models/OptionalPluginWarning.cs
Normal file
7
MareSynchronos/Models/OptionalPluginWarning.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace MareSynchronos.Models;
|
||||||
|
|
||||||
|
public record OptionalPluginWarning
|
||||||
|
{
|
||||||
|
public bool ShownHeelsWarning { get; set; } = false;
|
||||||
|
public bool ShownCustomizePlusWarning { get; set; } = false;
|
||||||
|
}
|
||||||
@@ -190,7 +190,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
_playerManager = new PlayerManager(_apiController, _ipcManager,
|
_playerManager = new PlayerManager(_apiController, _ipcManager,
|
||||||
characterCacheFactory, _dalamudUtil, _transientResourceManager, _periodicFileScanner);
|
characterCacheFactory, _dalamudUtil, _transientResourceManager, _periodicFileScanner);
|
||||||
_characterCacheManager = new OnlinePlayerManager(_apiController,
|
_characterCacheManager = new OnlinePlayerManager(_apiController,
|
||||||
_dalamudUtil, _ipcManager, _playerManager, _fileCacheManager);
|
_dalamudUtil, _ipcManager, _playerManager, _fileCacheManager, _configuration);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public class SettingsUi : Window, IDisposable
|
|||||||
private string _lastTab = string.Empty;
|
private string _lastTab = string.Empty;
|
||||||
private bool _openPopupOnAddition;
|
private bool _openPopupOnAddition;
|
||||||
private bool _hideInfoMessages;
|
private bool _hideInfoMessages;
|
||||||
|
private bool _disableOptionalPluginsWarnings;
|
||||||
|
|
||||||
public SettingsUi(WindowSystem windowSystem,
|
public SettingsUi(WindowSystem windowSystem,
|
||||||
UiShared uiShared, Configuration configuration, ApiController apiController) : base("Mare Synchronos Settings")
|
UiShared uiShared, Configuration configuration, ApiController apiController) : base("Mare Synchronos Settings")
|
||||||
@@ -46,6 +47,7 @@ public class SettingsUi : Window, IDisposable
|
|||||||
_uiShared = uiShared;
|
_uiShared = uiShared;
|
||||||
_openPopupOnAddition = _configuration.OpenPopupOnAdd;
|
_openPopupOnAddition = _configuration.OpenPopupOnAdd;
|
||||||
_hideInfoMessages = _configuration.HideInfoMessages;
|
_hideInfoMessages = _configuration.HideInfoMessages;
|
||||||
|
_disableOptionalPluginsWarnings = _configuration.DisableOptionalPluginWarnings;
|
||||||
windowSystem.AddWindow(this);
|
windowSystem.AddWindow(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,6 +173,12 @@ public class SettingsUi : Window, IDisposable
|
|||||||
_configuration.Save();
|
_configuration.Save();
|
||||||
}
|
}
|
||||||
UiShared.DrawHelpText("Enabling this will not print any \"Info\" labeled messages into the game chat.");
|
UiShared.DrawHelpText("Enabling this will not print any \"Info\" labeled messages into the game chat.");
|
||||||
|
if (ImGui.Checkbox("Disable optional plugin warnings", ref _disableOptionalPluginsWarnings))
|
||||||
|
{
|
||||||
|
_configuration.DisableOptionalPluginWarnings = _disableOptionalPluginsWarnings;
|
||||||
|
_configuration.Save();
|
||||||
|
}
|
||||||
|
UiShared.DrawHelpText("Enabling this will not print any \"Warning\" labeled messages for missing optional plugins Heels or Customize+ in the game chat.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void DrawAdministration()
|
private void DrawAdministration()
|
||||||
|
|||||||
Reference in New Issue
Block a user