cache result of IsWine
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using MareSynchronos.MareConfiguration;
|
using MareSynchronos.MareConfiguration;
|
||||||
|
using MareSynchronos.Services;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
@@ -15,12 +16,14 @@ public sealed class FileCompactor
|
|||||||
private readonly ILogger<FileCompactor> _logger;
|
private readonly ILogger<FileCompactor> _logger;
|
||||||
|
|
||||||
private readonly MareConfigService _mareConfigService;
|
private readonly MareConfigService _mareConfigService;
|
||||||
|
private readonly DalamudUtilService _dalamudUtilService;
|
||||||
|
|
||||||
public FileCompactor(ILogger<FileCompactor> logger, MareConfigService mareConfigService)
|
public FileCompactor(ILogger<FileCompactor> logger, MareConfigService mareConfigService, DalamudUtilService dalamudUtilService)
|
||||||
{
|
{
|
||||||
_clusterSizes = new(StringComparer.Ordinal);
|
_clusterSizes = new(StringComparer.Ordinal);
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_mareConfigService = mareConfigService;
|
_mareConfigService = mareConfigService;
|
||||||
|
_dalamudUtilService = dalamudUtilService;
|
||||||
_efInfo = new WOF_FILE_COMPRESSION_INFO_V1
|
_efInfo = new WOF_FILE_COMPRESSION_INFO_V1
|
||||||
{
|
{
|
||||||
Algorithm = CompressionAlgorithm.XPRESS8K,
|
Algorithm = CompressionAlgorithm.XPRESS8K,
|
||||||
@@ -66,7 +69,7 @@ public sealed class FileCompactor
|
|||||||
{
|
{
|
||||||
bool ntfs = isNTFS ?? string.Equals(new DriveInfo(new FileInfo(filePath).Directory!.Root.FullName).DriveFormat, "NTFS", StringComparison.OrdinalIgnoreCase);
|
bool ntfs = isNTFS ?? string.Equals(new DriveInfo(new FileInfo(filePath).Directory!.Root.FullName).DriveFormat, "NTFS", StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
if (Dalamud.Utility.Util.IsWine() || !ntfs) return new FileInfo(filePath).Length;
|
if (_dalamudUtilService.IsWine || !ntfs) return new FileInfo(filePath).Length;
|
||||||
|
|
||||||
var clusterSize = GetClusterSize(filePath);
|
var clusterSize = GetClusterSize(filePath);
|
||||||
if (clusterSize == -1) return new FileInfo(filePath).Length;
|
if (clusterSize == -1) return new FileInfo(filePath).Length;
|
||||||
@@ -79,7 +82,7 @@ public sealed class FileCompactor
|
|||||||
{
|
{
|
||||||
await File.WriteAllBytesAsync(filePath, decompressedFile, token).ConfigureAwait(false);
|
await File.WriteAllBytesAsync(filePath, decompressedFile, token).ConfigureAwait(false);
|
||||||
|
|
||||||
if (Dalamud.Utility.Util.IsWine() || !_mareConfigService.Current.UseCompactor)
|
if (_dalamudUtilService.IsWine || !_mareConfigService.Current.UseCompactor)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using Dalamud.Game.ClientState.Conditions;
|
using Dalamud.Game.ClientState.Conditions;
|
||||||
using Dalamud.Game.ClientState.Objects;
|
using Dalamud.Game.ClientState.Objects;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
|
using Dalamud.Utility;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Game.Control;
|
using FFXIVClientStructs.FFXIV.Client.Game.Control;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
|
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
|
||||||
@@ -92,8 +93,10 @@ public class DalamudUtilService : IHostedService, IMediatorSubscriber
|
|||||||
_toastGui.ShowError("Player out of range.");
|
_toastGui.ShowError("Player out of range.");
|
||||||
}).ConfigureAwait(false);
|
}).ConfigureAwait(false);
|
||||||
});
|
});
|
||||||
|
IsWine = Util.IsWine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsWine { get; init; }
|
||||||
public unsafe GameObject* GposeTarget => TargetSystem.Instance()->GPoseTarget;
|
public unsafe GameObject* GposeTarget => TargetSystem.Instance()->GPoseTarget;
|
||||||
public unsafe DalamudGameObject? GposeTargetGameObject => GposeTarget == null ? null : _objectTable[GposeTarget->ObjectIndex];
|
public unsafe DalamudGameObject? GposeTargetGameObject => GposeTarget == null ? null : _objectTable[GposeTarget->ObjectIndex];
|
||||||
public bool IsAnythingDrawing { get; private set; } = false;
|
public bool IsAnythingDrawing { get; private set; } = false;
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public class IntroUi : WindowMediatorSubscriberBase
|
|||||||
private readonly CacheMonitor _cacheMonitor;
|
private readonly CacheMonitor _cacheMonitor;
|
||||||
private readonly Dictionary<string, string> _languages = new(StringComparer.Ordinal) { { "English", "en" }, { "Deutsch", "de" }, { "Français", "fr" } };
|
private readonly Dictionary<string, string> _languages = new(StringComparer.Ordinal) { { "English", "en" }, { "Deutsch", "de" }, { "Français", "fr" } };
|
||||||
private readonly ServerConfigurationManager _serverConfigurationManager;
|
private readonly ServerConfigurationManager _serverConfigurationManager;
|
||||||
|
private readonly DalamudUtilService _dalamudUtilService;
|
||||||
private readonly UiSharedService _uiShared;
|
private readonly UiSharedService _uiShared;
|
||||||
private int _currentLanguage;
|
private int _currentLanguage;
|
||||||
private bool _readFirstPage;
|
private bool _readFirstPage;
|
||||||
@@ -43,14 +44,14 @@ public class IntroUi : WindowMediatorSubscriberBase
|
|||||||
|
|
||||||
public IntroUi(ILogger<IntroUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController,
|
public IntroUi(ILogger<IntroUi> logger, UiSharedService uiShared, MareConfigService configService, ApiController apiController,
|
||||||
CacheMonitor fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator,
|
CacheMonitor fileCacheManager, ServerConfigurationManager serverConfigurationManager, MareMediator mareMediator,
|
||||||
PerformanceCollectorService performanceCollectorService) : base(logger, mareMediator, "Loporrit Setup", performanceCollectorService)
|
PerformanceCollectorService performanceCollectorService, DalamudUtilService dalamudUtilService) : base(logger, mareMediator, "Loporrit Setup", performanceCollectorService)
|
||||||
{
|
{
|
||||||
_uiShared = uiShared;
|
_uiShared = uiShared;
|
||||||
_configService = configService;
|
_configService = configService;
|
||||||
_apiController = apiController;
|
_apiController = apiController;
|
||||||
_cacheMonitor = fileCacheManager;
|
_cacheMonitor = fileCacheManager;
|
||||||
_serverConfigurationManager = serverConfigurationManager;
|
_serverConfigurationManager = serverConfigurationManager;
|
||||||
|
_dalamudUtilService = dalamudUtilService;
|
||||||
IsOpen = false;
|
IsOpen = false;
|
||||||
ShowCloseButton = false;
|
ShowCloseButton = false;
|
||||||
RespectCloseHotkey = false;
|
RespectCloseHotkey = false;
|
||||||
@@ -66,7 +67,7 @@ public class IntroUi : WindowMediatorSubscriberBase
|
|||||||
Mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => IsOpen = false);
|
Mediator.Subscribe<SwitchToMainUiMessage>(this, (_) => IsOpen = false);
|
||||||
Mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) =>
|
Mediator.Subscribe<SwitchToIntroUiMessage>(this, (_) =>
|
||||||
{
|
{
|
||||||
_configService.Current.UseCompactor = !Util.IsWine();
|
_configService.Current.UseCompactor = !dalamudUtilService.IsWine;
|
||||||
IsOpen = true;
|
IsOpen = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -189,7 +190,7 @@ public class IntroUi : WindowMediatorSubscriberBase
|
|||||||
{
|
{
|
||||||
_uiShared.DrawFileScanState();
|
_uiShared.DrawFileScanState();
|
||||||
}
|
}
|
||||||
if (!Util.IsWine())
|
if (!_dalamudUtilService.IsWine)
|
||||||
{
|
{
|
||||||
var useFileCompactor = _configService.Current.UseCompactor;
|
var useFileCompactor = _configService.Current.UseCompactor;
|
||||||
if (ImGui.Checkbox("Use File Compactor", ref useFileCompactor))
|
if (ImGui.Checkbox("Use File Compactor", ref useFileCompactor))
|
||||||
|
|||||||
@@ -39,10 +39,10 @@ public class SettingsUi : WindowMediatorSubscriberBase
|
|||||||
private readonly ApiController _apiController;
|
private readonly ApiController _apiController;
|
||||||
private readonly IpcManager _ipcManager;
|
private readonly IpcManager _ipcManager;
|
||||||
private readonly CacheMonitor _cacheMonitor;
|
private readonly CacheMonitor _cacheMonitor;
|
||||||
|
private readonly DalamudUtilService _dalamudUtilService;
|
||||||
private readonly MareConfigService _configService;
|
private readonly MareConfigService _configService;
|
||||||
private readonly ConcurrentDictionary<GameObjectHandler, Dictionary<string, FileDownloadStatus>> _currentDownloads = new();
|
private readonly ConcurrentDictionary<GameObjectHandler, Dictionary<string, FileDownloadStatus>> _currentDownloads = new();
|
||||||
private readonly FileCompactor _fileCompactor;
|
private readonly FileCompactor _fileCompactor;
|
||||||
private readonly DalamudUtilService _dalamudUtilService;
|
|
||||||
private readonly FileUploadManager _fileTransferManager;
|
private readonly FileUploadManager _fileTransferManager;
|
||||||
private readonly FileTransferOrchestrator _fileTransferOrchestrator;
|
private readonly FileTransferOrchestrator _fileTransferOrchestrator;
|
||||||
private readonly FileCacheManager _fileCacheManager;
|
private readonly FileCacheManager _fileCacheManager;
|
||||||
@@ -96,6 +96,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
|
|||||||
_apiController = apiController;
|
_apiController = apiController;
|
||||||
_ipcManager = ipcManager;
|
_ipcManager = ipcManager;
|
||||||
_cacheMonitor = cacheMonitor;
|
_cacheMonitor = cacheMonitor;
|
||||||
|
_dalamudUtilService = dalamudUtilService;
|
||||||
_fileCompactor = fileCompactor;
|
_fileCompactor = fileCompactor;
|
||||||
_uiShared = uiShared;
|
_uiShared = uiShared;
|
||||||
AllowClickthrough = false;
|
AllowClickthrough = false;
|
||||||
@@ -798,7 +799,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
|
|||||||
ImGui.TextUnformatted($"Currently utilized local storage: {UiSharedService.ByteToString(_cacheMonitor.FileCacheSize)}");
|
ImGui.TextUnformatted($"Currently utilized local storage: {UiSharedService.ByteToString(_cacheMonitor.FileCacheSize)}");
|
||||||
else
|
else
|
||||||
ImGui.TextUnformatted($"Currently utilized local storage: Calculating...");
|
ImGui.TextUnformatted($"Currently utilized local storage: Calculating...");
|
||||||
bool isLinux = Util.IsWine();
|
bool isLinux = _dalamudUtilService.IsWine;
|
||||||
if (!isLinux)
|
if (!isLinux)
|
||||||
ImGui.TextUnformatted($"Remaining space free on drive: {UiSharedService.ByteToString(_cacheMonitor.FileCacheDriveFree)}");
|
ImGui.TextUnformatted($"Remaining space free on drive: {UiSharedService.ByteToString(_cacheMonitor.FileCacheDriveFree)}");
|
||||||
bool useFileCompactor = _configService.Current.UseCompactor;
|
bool useFileCompactor = _configService.Current.UseCompactor;
|
||||||
@@ -822,8 +823,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
|
|||||||
_ = Task.Run(() =>
|
_ = Task.Run(() =>
|
||||||
{
|
{
|
||||||
_fileCompactor.CompactStorage(compress: true);
|
_fileCompactor.CompactStorage(compress: true);
|
||||||
CancellationTokenSource cts = new();
|
_cacheMonitor.RecalculateFileCacheSize(CancellationToken.None);
|
||||||
_cacheMonitor.RecalculateFileCacheSize(cts.Token);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
UiSharedService.AttachToolTip("This will run compression on all files in your current storage folder." + Environment.NewLine
|
UiSharedService.AttachToolTip("This will run compression on all files in your current storage folder." + Environment.NewLine
|
||||||
@@ -835,7 +835,7 @@ public class SettingsUi : WindowMediatorSubscriberBase
|
|||||||
{
|
{
|
||||||
_fileCompactor.CompactStorage(compress: false);
|
_fileCompactor.CompactStorage(compress: false);
|
||||||
CancellationTokenSource cts = new();
|
CancellationTokenSource cts = new();
|
||||||
_cacheMonitor.RecalculateFileCacheSize(cts.Token);
|
_cacheMonitor.RecalculateFileCacheSize(CancellationToken.None);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
UiSharedService.AttachToolTip("This will run decompression on all files in your current storage folder.");
|
UiSharedService.AttachToolTip("This will run decompression on all files in your current storage folder.");
|
||||||
|
|||||||
Reference in New Issue
Block a user