idk, probably some crashfixes or so
This commit is contained in:
		| @@ -171,9 +171,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|     public async Task CustomizePlusRevert(IntPtr character) |     public async Task CustomizePlusRevert(IntPtr character) | ||||||
|     { |     { | ||||||
|         if (!CheckCustomizePlusApi()) return; |         if (!CheckCustomizePlusApi()) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(() => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true); | ||||||
|             if (gameObj is Character c) |             if (gameObj is Character c) | ||||||
|             { |             { | ||||||
|                 Logger.LogTrace("CustomizePlus reverting for {chara}", c.Address.ToString("X")); |                 Logger.LogTrace("CustomizePlus reverting for {chara}", c.Address.ToString("X")); | ||||||
| @@ -185,9 +185,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|     public async Task CustomizePlusSetBodyScale(IntPtr character, string scale) |     public async Task CustomizePlusSetBodyScale(IntPtr character, string scale) | ||||||
|     { |     { | ||||||
|         if (!CheckCustomizePlusApi() || string.IsNullOrEmpty(scale)) return; |         if (!CheckCustomizePlusApi() || string.IsNullOrEmpty(scale)) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(() => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true); | ||||||
|             if (gameObj is Character c) |             if (gameObj is Character c) | ||||||
|             { |             { | ||||||
|                 string decodedScale = Encoding.UTF8.GetString(Convert.FromBase64String(scale)); |                 string decodedScale = Encoding.UTF8.GetString(Convert.FromBase64String(scale)); | ||||||
| @@ -217,7 +217,7 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|         try |         try | ||||||
|         { |         { | ||||||
|             await _glamourerApplicationSemaphore.WaitAsync().ConfigureAwait(true); |             await _glamourerApplicationSemaphore.WaitAsync().ConfigureAwait(true); | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(handler.Address); |             var gameObj = await _dalamudUtil.CreateGameObject(handler.Address).ConfigureAwait(false); | ||||||
|             if (gameObj is Character c) |             if (gameObj is Character c) | ||||||
|             { |             { | ||||||
|                 await PenumbraRedrawAsync(logger, handler, applicationId, () => _glamourerApplyAll!.InvokeAction(customization, c), fireAndForget, token).ConfigureAwait(false); |                 await PenumbraRedrawAsync(logger, handler, applicationId, () => _glamourerApplyAll!.InvokeAction(customization, c), fireAndForget, token).ConfigureAwait(false); | ||||||
| @@ -235,10 +235,10 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|         try |         try | ||||||
|         { |         { | ||||||
|             await _glamourerApplicationSemaphore.WaitAsync().ConfigureAwait(false); |             await _glamourerApplicationSemaphore.WaitAsync().ConfigureAwait(false); | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(handler.Address); |             var gameObj = await _dalamudUtil.CreateGameObject(handler.Address).ConfigureAwait(false); | ||||||
|             if (gameObj is Character c) |             if (gameObj is Character c) | ||||||
|             { |             { | ||||||
|                 await PenumbraRedrawAsync(logger, handler, applicationid, () => _glamourerApplyOnlyEquipment!.InvokeAction(customization, c), fireAndForget, token).ConfigureAwait(false); |                 await PenumbraRedrawAsync(logger, handler, applicationid, () => _glamourerApplyOnlyCustomization!.InvokeAction(customization, c), fireAndForget, token).ConfigureAwait(false); | ||||||
|                 await PenumbraRedrawAsync(logger, handler, applicationid, () => _glamourerApplyOnlyEquipment!.InvokeAction(equipment, c), fireAndForget, token).ConfigureAwait(false); |                 await PenumbraRedrawAsync(logger, handler, applicationid, () => _glamourerApplyOnlyEquipment!.InvokeAction(equipment, c), fireAndForget, token).ConfigureAwait(false); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
| @@ -253,7 +253,7 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|         if (!CheckGlamourerApi()) return string.Empty; |         if (!CheckGlamourerApi()) return string.Empty; | ||||||
|         try |         try | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(false); | ||||||
|             if (gameObj is Character c) |             if (gameObj is Character c) | ||||||
|             { |             { | ||||||
|                 var glamourerString = await _dalamudUtil.RunOnFrameworkThread(() => _glamourerGetAllCustomization!.InvokeFunc(c)).ConfigureAwait(false); |                 var glamourerString = await _dalamudUtil.RunOnFrameworkThread(() => _glamourerGetAllCustomization!.InvokeFunc(c)).ConfigureAwait(false); | ||||||
| @@ -274,9 +274,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|     public async Task HeelsRestoreOffsetForPlayer(IntPtr character) |     public async Task HeelsRestoreOffsetForPlayer(IntPtr character) | ||||||
|     { |     { | ||||||
|         if (!CheckHeelsApi()) return; |         if (!CheckHeelsApi()) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(() => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true); | ||||||
|             if (gameObj != null) |             if (gameObj != null) | ||||||
|             { |             { | ||||||
|                 Logger.LogTrace("Restoring Heels data to {chara}", character.ToString("X")); |                 Logger.LogTrace("Restoring Heels data to {chara}", character.ToString("X")); | ||||||
| @@ -288,9 +288,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|     public async Task HeelsSetOffsetForPlayer(IntPtr character, float offset) |     public async Task HeelsSetOffsetForPlayer(IntPtr character, float offset) | ||||||
|     { |     { | ||||||
|         if (!CheckHeelsApi()) return; |         if (!CheckHeelsApi()) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(() => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true); | ||||||
|             if (gameObj != null) |             if (gameObj != null) | ||||||
|             { |             { | ||||||
|                 Logger.LogTrace("Applying Heels data to {chara}", character.ToString("X")); |                 Logger.LogTrace("Applying Heels data to {chara}", character.ToString("X")); | ||||||
| @@ -302,9 +302,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|     public async Task HonorificClearTitle(nint character) |     public async Task HonorificClearTitle(nint character) | ||||||
|     { |     { | ||||||
|         if (!CheckHonorificApi()) return; |         if (!CheckHonorificApi()) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(() => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true); | ||||||
|             if (gameObj is PlayerCharacter c) |             if (gameObj is PlayerCharacter c) | ||||||
|             { |             { | ||||||
|                 Logger.LogTrace("Honorific removing for {addr}", c.Address.ToString("X")); |                 Logger.LogTrace("Honorific removing for {addr}", c.Address.ToString("X")); | ||||||
| @@ -323,10 +323,10 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|     public async Task HonorificSetTitle(IntPtr character, string honorificData) |     public async Task HonorificSetTitle(IntPtr character, string honorificData) | ||||||
|     { |     { | ||||||
|         if (!CheckHonorificApi()) return; |         if (!CheckHonorificApi()) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(() => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             Logger.LogTrace("Applying Honorific data to {chara}", character.ToString("X")); |             Logger.LogTrace("Applying Honorific data to {chara}", character.ToString("X")); | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true); | ||||||
|             if (gameObj is PlayerCharacter pc) |             if (gameObj is PlayerCharacter pc) | ||||||
|             { |             { | ||||||
|                 if (string.IsNullOrEmpty(honorificData)) |                 if (string.IsNullOrEmpty(honorificData)) | ||||||
| @@ -352,9 +352,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|     public async Task PalettePlusRemovePalette(IntPtr character) |     public async Task PalettePlusRemovePalette(IntPtr character) | ||||||
|     { |     { | ||||||
|         if (!CheckPalettePlusApi()) return; |         if (!CheckPalettePlusApi()) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(() => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true); | ||||||
|             if (gameObj is Character c) |             if (gameObj is Character c) | ||||||
|             { |             { | ||||||
|                 Logger.LogTrace("PalettePlus removing for {addr}", c.Address.ToString("X")); |                 Logger.LogTrace("PalettePlus removing for {addr}", c.Address.ToString("X")); | ||||||
| @@ -366,9 +366,9 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|     public async Task PalettePlusSetPalette(IntPtr character, string palette) |     public async Task PalettePlusSetPalette(IntPtr character, string palette) | ||||||
|     { |     { | ||||||
|         if (!CheckPalettePlusApi()) return; |         if (!CheckPalettePlusApi()) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(() => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(character); |             var gameObj = await _dalamudUtil.CreateGameObject(character).ConfigureAwait(true); | ||||||
|             if (gameObj is Character c) |             if (gameObj is Character c) | ||||||
|             { |             { | ||||||
|                 string decodedPalette = Encoding.UTF8.GetString(Convert.FromBase64String(palette)); |                 string decodedPalette = Encoding.UTF8.GetString(Convert.FromBase64String(palette)); | ||||||
| @@ -398,7 +398,7 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|         if (!CheckPenumbraApi() || _dalamudUtil.IsZoning) return; |         if (!CheckPenumbraApi() || _dalamudUtil.IsZoning) return; | ||||||
|         await _dalamudUtil.RunOnFrameworkThread(async () => |         await _dalamudUtil.RunOnFrameworkThread(async () => | ||||||
|         { |         { | ||||||
|             var gameObj = _dalamudUtil.CreateGameObject(handler.Address); |             var gameObj = await _dalamudUtil.CreateGameObject(handler.Address).ConfigureAwait(true); | ||||||
|             if (gameObj is Character c) |             if (gameObj is Character c) | ||||||
|             { |             { | ||||||
|                 await PenumbraRedrawAsync(logger, handler, applicationId, () => _penumbraRedrawObject!.Invoke(c, RedrawType.Redraw), fireAndForget, token).ConfigureAwait(false); |                 await PenumbraRedrawAsync(logger, handler, applicationId, () => _penumbraRedrawObject!.Invoke(c, RedrawType.Redraw), fireAndForget, token).ConfigureAwait(false); | ||||||
| @@ -626,7 +626,7 @@ public sealed class IpcManager : DisposableMediatorSubscriberBase | |||||||
|  |  | ||||||
|     private void OnHonorificLocalCharacterTitleChanged(string title, bool isPrefix) |     private void OnHonorificLocalCharacterTitleChanged(string title, bool isPrefix) | ||||||
|     { |     { | ||||||
|         Mediator.Publish(new HonorificMessage((isPrefix ? 0 : 1) + title)); |         Mediator.Publish(new HonorificMessage((isPrefix ? 1 : 0) + title)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void OnPalettePlusPaletteChange(Character character, string palette) |     private void OnPalettePlusPaletteChange(Character character, string palette) | ||||||
|   | |||||||
| @@ -316,7 +316,7 @@ public class PlayerDataFactory | |||||||
|         // wait until chara is not drawing and present so nothing spontaneously explodes |         // wait until chara is not drawing and present so nothing spontaneously explodes | ||||||
|         await _dalamudUtil.WaitWhileCharacterIsDrawing(_logger, playerRelatedObject, Guid.NewGuid(), 30000, ct: token).ConfigureAwait(false); |         await _dalamudUtil.WaitWhileCharacterIsDrawing(_logger, playerRelatedObject, Guid.NewGuid(), 30000, ct: token).ConfigureAwait(false); | ||||||
|         int totalWaitTime = 10000; |         int totalWaitTime = 10000; | ||||||
|         while (!DalamudUtilService.IsObjectPresent(_dalamudUtil.CreateGameObject(charaPointer)) && totalWaitTime > 0) |         while (!DalamudUtilService.IsObjectPresent(await _dalamudUtil.RunOnFrameworkThread(() => _dalamudUtil.CreateGameObject(charaPointer).GetAwaiter().GetResult()).ConfigureAwait(false)) && totalWaitTime > 0) | ||||||
|         { |         { | ||||||
|             _logger.LogTrace("Character is null but it shouldn't be, waiting"); |             _logger.LogTrace("Character is null but it shouldn't be, waiting"); | ||||||
|             await Task.Delay(50, token).ConfigureAwait(false); |             await Task.Delay(50, token).ConfigureAwait(false); | ||||||
|   | |||||||
| @@ -164,7 +164,7 @@ public sealed class GameObjectHandler : DisposableMediatorSubscriberBase | |||||||
|             Address = curPtr; |             Address = curPtr; | ||||||
|             if (addrDiff) |             if (addrDiff) | ||||||
|             { |             { | ||||||
|                 GameObjectLazy = new(() => _dalamudUtil.CreateGameObject(curPtr)); |                 GameObjectLazy = new(() => _dalamudUtil.CreateGameObject(curPtr).GetAwaiter().GetResult()); | ||||||
|             } |             } | ||||||
|             var chara = (Character*)curPtr; |             var chara = (Character*)curPtr; | ||||||
|             var name = new ByteString(chara->GameObject.Name).ToString(); |             var name = new ByteString(chara->GameObject.Name).ToString(); | ||||||
|   | |||||||
| @@ -204,8 +204,8 @@ public sealed class CachedPlayer : DisposableMediatorSubscriberBase | |||||||
|     { |     { | ||||||
|         await _ipcManager.PenumbraRemoveTemporaryCollection(Logger, applicationId, PlayerName!).ConfigureAwait(false); |         await _ipcManager.PenumbraRemoveTemporaryCollection(Logger, applicationId, PlayerName!).ConfigureAwait(false); | ||||||
|         token.ThrowIfCancellationRequested(); |         token.ThrowIfCancellationRequested(); | ||||||
|         await _ipcManager.PenumbraSetTemporaryMods(Logger, applicationId, PlayerName!, |         var objTableIndex = await _dalamudUtil.RunOnFrameworkThread(() => _charaHandler!.GameObjectLazy!.Value.ObjectTableIndex()).ConfigureAwait(false); | ||||||
|             _charaHandler?.GameObjectLazy?.Value.ObjectTableIndex(), moddedPaths, manipulationData).ConfigureAwait(false); |         await _ipcManager.PenumbraSetTemporaryMods(Logger, applicationId, PlayerName!, objTableIndex, moddedPaths, manipulationData).ConfigureAwait(false); | ||||||
|         token.ThrowIfCancellationRequested(); |         token.ThrowIfCancellationRequested(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -485,7 +485,7 @@ public sealed class CachedPlayer : DisposableMediatorSubscriberBase | |||||||
|         if (string.IsNullOrEmpty(PlayerName)) |         if (string.IsNullOrEmpty(PlayerName)) | ||||||
|         { |         { | ||||||
|             var pc = _dalamudUtil.FindPlayerByNameHash(OnlineUser.Ident); |             var pc = _dalamudUtil.FindPlayerByNameHash(OnlineUser.Ident); | ||||||
|             if (pc == null) return; |             if (pc == default((string, nint))) return; | ||||||
|             Logger.LogDebug("One-Time Initializing {this}", this); |             Logger.LogDebug("One-Time Initializing {this}", this); | ||||||
|             Initialize(pc.Name.ToString()); |             Initialize(pc.Name.ToString()); | ||||||
|             Logger.LogDebug("One-Time Initialized {this}", this); |             Logger.LogDebug("One-Time Initialized {this}", this); | ||||||
|   | |||||||
| @@ -92,6 +92,8 @@ public class Pair | |||||||
|     { |     { | ||||||
|         try |         try | ||||||
|         { |         { | ||||||
|  |             if (CachedPlayer != null) return; | ||||||
|  |  | ||||||
|             _creationSemaphore.Wait(); |             _creationSemaphore.Wait(); | ||||||
|  |  | ||||||
|             if (dto == null && _onlineUserIdentDto == null) |             if (dto == null && _onlineUserIdentDto == null) | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ public class DalamudUtilService : IHostedService | |||||||
|     private readonly List<uint> ClassJobIdsIgnoredForPets = new() { 30 }; |     private readonly List<uint> ClassJobIdsIgnoredForPets = new() { 30 }; | ||||||
|     private uint? _classJobId = 0; |     private uint? _classJobId = 0; | ||||||
|     private DateTime _delayedFrameworkUpdateCheck = DateTime.Now; |     private DateTime _delayedFrameworkUpdateCheck = DateTime.Now; | ||||||
|     private Dictionary<string, PlayerCharacter> _playerCharas = new(StringComparer.Ordinal); |     private Dictionary<string, (string Name, nint Address)> _playerCharas = new(StringComparer.Ordinal); | ||||||
|     private bool _sentBetweenAreas = false; |     private bool _sentBetweenAreas = false; | ||||||
|  |  | ||||||
|     public DalamudUtilService(ILogger<DalamudUtilService> logger, ClientState clientState, ObjectTable objectTable, Framework framework, |     public DalamudUtilService(ILogger<DalamudUtilService> logger, ClientState clientState, ObjectTable objectTable, Framework framework, | ||||||
| @@ -77,9 +77,9 @@ public class DalamudUtilService : IHostedService | |||||||
|         return obj != null && obj.IsValid(); |         return obj != null && obj.IsValid(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public Dalamud.Game.ClientState.Objects.Types.GameObject? CreateGameObject(IntPtr reference) |     public async Task<Dalamud.Game.ClientState.Objects.Types.GameObject?> CreateGameObject(IntPtr reference) | ||||||
|     { |     { | ||||||
|         return _objectTable.CreateObjectReference(reference); |         return await RunOnFrameworkThread(() => _objectTable.CreateObjectReference(reference)).ConfigureAwait(false); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public Dalamud.Game.ClientState.Objects.Types.Character? GetCharacterFromObjectTableByIndex(int index) |     public Dalamud.Game.ClientState.Objects.Types.Character? GetCharacterFromObjectTableByIndex(int index) | ||||||
| @@ -94,12 +94,6 @@ public class DalamudUtilService : IHostedService | |||||||
|         return await RunOnFrameworkThread(() => GetCompanionInternal(playerPointer)).ConfigureAwait(false); |         return await RunOnFrameworkThread(() => GetCompanionInternal(playerPointer)).ConfigureAwait(false); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public unsafe IntPtr GetMinion(IntPtr? playerPointer = null) |  | ||||||
|     { |  | ||||||
|         playerPointer ??= PlayerPointer; |  | ||||||
|         return (IntPtr)((Character*)playerPointer)->CompanionObject; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public unsafe IntPtr GetMinionOrMount(IntPtr? playerPointer = null) |     public unsafe IntPtr GetMinionOrMount(IntPtr? playerPointer = null) | ||||||
|     { |     { | ||||||
|         playerPointer ??= PlayerPointer; |         playerPointer ??= PlayerPointer; | ||||||
| @@ -230,7 +224,7 @@ public class DalamudUtilService : IHostedService | |||||||
|         return _gameGui.WorldToScreen(obj.Position, out var screenPos) ? screenPos : Vector2.Zero; |         return _gameGui.WorldToScreen(obj.Position, out var screenPos) ? screenPos : Vector2.Zero; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     internal PlayerCharacter? FindPlayerByNameHash(string ident) |     internal (string Name, nint Address) FindPlayerByNameHash(string ident) | ||||||
|     { |     { | ||||||
|         _playerCharas.TryGetValue(ident, out var result); |         _playerCharas.TryGetValue(ident, out var result); | ||||||
|         return result; |         return result; | ||||||
| @@ -245,7 +239,7 @@ public class DalamudUtilService : IHostedService | |||||||
|     { |     { | ||||||
|         if (_clientState.LocalPlayer?.IsDead ?? false) return; |         if (_clientState.LocalPlayer?.IsDead ?? false) return; | ||||||
|  |  | ||||||
|         _playerCharas = _performanceCollector.LogPerformance(this, "ObjTableToCharas", () => _objectTable.OfType<PlayerCharacter>().ToDictionary(p => p.GetHash256(), p => p, StringComparer.Ordinal)); |         _playerCharas = _performanceCollector.LogPerformance(this, "ObjTableToCharas", () => _objectTable.OfType<PlayerCharacter>().ToDictionary(p => p.GetHash256(), p => (p.Name.ToString(), p.Address), StringComparer.Ordinal)); | ||||||
|  |  | ||||||
|         if (GposeTarget != null && !IsInGpose) |         if (GposeTarget != null && !IsInGpose) | ||||||
|         { |         { | ||||||
|   | |||||||
| @@ -146,9 +146,6 @@ public partial class FileDownloadManager : DisposableMediatorSubscriberBase | |||||||
|     { |     { | ||||||
|         Logger.LogDebug("Downloading files for {id}", gameObjectHandler.Name); |         Logger.LogDebug("Downloading files for {id}", gameObjectHandler.Name); | ||||||
|  |  | ||||||
|         // force create lazy |  | ||||||
|         _ = gameObjectHandler.GameObjectLazy.Value; |  | ||||||
|  |  | ||||||
|         List<DownloadFileDto> downloadFileInfoFromService = new(); |         List<DownloadFileDto> downloadFileInfoFromService = new(); | ||||||
|         downloadFileInfoFromService.AddRange(await FilesGetSizes(fileReplacement.Select(f => f.Hash).ToList(), ct).ConfigureAwait(false)); |         downloadFileInfoFromService.AddRange(await FilesGetSizes(fileReplacement.Select(f => f.Hash).ToList(), ct).ConfigureAwait(false)); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 rootdarkarchon
					rootdarkarchon