From 35b213c744e11711c3cb2f515e8625c423953d28 Mon Sep 17 00:00:00 2001 From: pfh59 <109206285+pfh59@users.noreply.github.com> Date: Mon, 24 Jun 2024 22:23:06 +0200 Subject: [PATCH] First pass (#278) * FIx : https://sonarcloud.io/organizations/pfh59/rules?open=csharpsquid%3AS3168&rule_key=csharpsquid%3AS3168 * Fix : test covarege * Refactoring --- .../Models/Graph/GraphModelsTest.cs | 10 +- .../Services/Db/DbIntegrationTest.cs | 27 ++- .../WHHelper/EveWHMapperHelperTest.cs | 10 +- .../WHHelper/WHColorHelperTest.cs | 10 +- src/WHMapper/Hubs/IWHMapperNotificationHub.cs | 2 +- src/WHMapper/Hubs/WHMapperNotificationHub.cs | 4 +- .../Models/Custom/Node/EveSystemNodeModel.cs | 10 +- .../Models/DTO/EveAPI/Assets/Asset.cs | 4 +- .../DTO/EveMapper/Enums/EveSystemTypeEnums.cs | 41 ++-- .../Models/Db/Enums/WHSystemStatusEnums.cs | 2 +- src/WHMapper/Models/Db/WHNote.cs | 8 +- .../Pages/Mapper/Administration/Overview.cs | 4 +- src/WHMapper/Pages/Mapper/Notes/Overview.cs | 42 +++-- src/WHMapper/Pages/Mapper/Overview.cs | 6 +- src/WHMapper/Pages/Mapper/Overview.razor | 8 +- .../Pages/Mapper/RoutePlanner/Overview.cs | 4 +- .../Pages/Mapper/Signatures/Overview.cs | 144 +++++++------- .../Repositories/ADefaultRepository.cs | 8 +- .../WHAccesses/WHAccessRepository.cs | 15 +- .../WHAdmins/WHAdminRepository.cs | 14 +- .../WHJumpLogs/WHJumpLogRepository.cs | 14 +- .../Repositories/WHMaps/WHMapRepository.cs | 14 +- .../Repositories/WHNotes/WHNoteRepository.cs | 16 +- .../WHRoutes/WHRouteRepository.cs | 18 +- .../WHSignatures/WHSignatureRepository.cs | 24 +-- .../WHSystemLinks/WHSystemLinkRepository.cs | 14 +- .../WHSystems/WHSystemRepository.cs | 14 +- .../Services/EveMapper/EveMapperHelper.cs | 178 +++++++----------- .../Services/EveMapper/EveMapperTracker.cs | 60 +++--- .../Services/EveMapper/IEveMapperHelper.cs | 2 +- .../Services/SDE/SDEServiceManager.cs | 131 +++++++------ .../Services/WHColor/IWHColorHelper.cs | 2 +- .../Services/WHColor/WHColorHelper.cs | 10 +- .../WHSignatures/WHSignatureHelper.cs | 139 ++++++-------- 34 files changed, 479 insertions(+), 530 deletions(-) diff --git a/src/WHMapper.Tests/Models/Graph/GraphModelsTest.cs b/src/WHMapper.Tests/Models/Graph/GraphModelsTest.cs index 0eaea882..83ba2541 100644 --- a/src/WHMapper.Tests/Models/Graph/GraphModelsTest.cs +++ b/src/WHMapper.Tests/Models/Graph/GraphModelsTest.cs @@ -53,7 +53,7 @@ public GraphModelsTest() [Fact] public async Task Eve_System_Node_Model() { - var node = new EveSystemNodeModel(new WHSystem(DEFAULT_MAP_ID,SOLAR_SYSTEM_JITA_ID, SOLAR_SYSTEM_JITA_NAME, SOLAR_SYSTEM_EXTENSION_NAME, SOLAR_SYSTEM_JITA_SECURITY), new WHNote(SOLAR_SYSTEM_JITA_ID,WHSystemStatusEnum.Friendly,SOLAR_SYSTEM_JITA_NAME), REGION_JITA_NAME, CONSTELLATION_JITA_NAME); + var node = new EveSystemNodeModel(new WHSystem(DEFAULT_MAP_ID,SOLAR_SYSTEM_JITA_ID, SOLAR_SYSTEM_JITA_NAME, SOLAR_SYSTEM_EXTENSION_NAME, SOLAR_SYSTEM_JITA_SECURITY), new WHNote(SOLAR_SYSTEM_JITA_ID,WHSystemStatus.Friendly,SOLAR_SYSTEM_JITA_NAME), REGION_JITA_NAME, CONSTELLATION_JITA_NAME); Assert.NotNull(node); Assert.Equal(0, node.IdWH); Assert.Equal(DEFAULT_MAP_ID, node.IdWHMap); @@ -63,7 +63,7 @@ public async Task Eve_System_Node_Model() Assert.Equal("B", node.NameExtension); Assert.Empty(node.ConnectedUsers); Assert.False(node.Locked); - Assert.Equal(WHSystemStatusEnum.Friendly,node.SystemStatus); + Assert.Equal(WHSystemStatus.Friendly,node.SystemStatus); await node.AddConnectedUser(USERNAME1); await node.AddConnectedUser(USERNAME2); @@ -87,8 +87,8 @@ public async Task Eve_System_Node_Model() node.DecrementNameExtension(); Assert.Null(node.NameExtension); - node.SystemStatus=WHSystemStatusEnum.Hostile; - Assert.Equal(WHSystemStatusEnum.Hostile,node.SystemStatus); + node.SystemStatus=WHSystemStatus.Hostile; + Assert.Equal(WHSystemStatus.Hostile,node.SystemStatus); node.Locked=true; Assert.True(node.Locked); @@ -108,7 +108,7 @@ public async Task Eve_System_Node_Model() public void Eve_System_Link_Model() { var node = new EveSystemNodeModel(new WHSystem(DEFAULT_MAP_ID,SOLAR_SYSTEM_JITA_ID, SOLAR_SYSTEM_JITA_NAME, SOLAR_SYSTEM_JITA_SECURITY), null, REGION_JITA_NAME, CONSTELLATION_JITA_NAME); - Assert.Equal(WHSystemStatusEnum.Unknown,node.SystemStatus); + Assert.Equal(WHSystemStatus.Unknown,node.SystemStatus); var node2 = new EveSystemNodeModel(new WHSystem(DEFAULT_MAP_ID, SOLAR_SYSTEM_WH_ID, SOLAR_SYSTEM_WH_NAME, -1.0F), null, REGION_WH_NAME, CONSTELLATION_WH_NAME,SOLAR_SYSTEM_WH_CLASS, SOLAR_SYSTEM_WH_EFFECT,null, new List() { new WHStatic(SOLAR_SYSTEM_WH_STATICS,EveSystemType.C3) }) ; diff --git a/src/WHMapper.Tests/Services/Db/DbIntegrationTest.cs b/src/WHMapper.Tests/Services/Db/DbIntegrationTest.cs index 73d835b9..fcd4dfb8 100644 --- a/src/WHMapper.Tests/Services/Db/DbIntegrationTest.cs +++ b/src/WHMapper.Tests/Services/Db/DbIntegrationTest.cs @@ -23,17 +23,16 @@ namespace WHMapper.Tests.Services; [Collection("C2-Services")] public class DbIntegrationTest { - private int EVE_CHARACTERE_ID = 2113720458; - private int EVE_CHARACTERE_ID2 = 2113932209; - private string EVE_CHARACTERE_NAME = "TOTO"; - private string EVE_CHARACTERE_NAME2 = "TITI"; - - private int EVE_CORPO_ID = 1344654522; - private string EVE_CORPO_NAME = "Corp1"; - private int EVE_CORPO_ID2 = 123456789; - private string EVE_CORPO_NAME2 = "Corp12"; - - private int EVE_ALLIANCE_ID = 1354830081; + private const int EVE_CHARACTERE_ID = 2113720458; + private const int EVE_CHARACTERE_ID2 = 2113932209; + private const string EVE_CHARACTERE_NAME = "TOTO"; + private const string EVE_CHARACTERE_NAME2 = "TITI"; + + private const int EVE_CORPO_ID = 1344654522; + private const string EVE_CORPO_NAME = "Corp1"; + private const int EVE_CORPO_ID2 = 123456789; + private const string EVE_CORPO_NAME2 = "Corp12"; + private const int EVE_ALLIANCE_ID = 1354830081; private const int FOOBAR_SYSTEM_ID = 123456; @@ -669,14 +668,14 @@ public async Task CRUD_WHNote() Assert.NotNull(result1); Assert.Equal(FOOBAR_SYSTEM_ID, result1.SoloarSystemId); Assert.Equal(FOOBAR, result1.Comment); - Assert.Equal(WHSystemStatusEnum.Unknown, result1.SystemStatus); + Assert.Equal(WHSystemStatus.Unknown, result1.SystemStatus); //ADD Note2 - var result2 = await repo.Create(new WHNote(FOOBAR_SYSTEM_ID2,WHSystemStatusEnum.Hostile)); + var result2 = await repo.Create(new WHNote(FOOBAR_SYSTEM_ID2,WHSystemStatus.Hostile)); Assert.NotNull(result2); Assert.Equal(FOOBAR_SYSTEM_ID2, result2.SoloarSystemId); Assert.Equal(string.Empty, result2.Comment); - Assert.Equal(WHSystemStatusEnum.Hostile,result2.SystemStatus); + Assert.Equal(WHSystemStatus.Hostile,result2.SystemStatus); //ADD Access dupkicate var resultDuplicate = await repo.Create(new WHNote(FOOBAR_SYSTEM_ID2, FOOBAR)); diff --git a/src/WHMapper.Tests/WHHelper/EveWHMapperHelperTest.cs b/src/WHMapper.Tests/WHHelper/EveWHMapperHelperTest.cs index 48b87c7d..149379c7 100644 --- a/src/WHMapper.Tests/WHHelper/EveWHMapperHelperTest.cs +++ b/src/WHMapper.Tests/WHHelper/EveWHMapperHelperTest.cs @@ -143,12 +143,18 @@ public EveWHMapperHelperTest() [Fact, Priority(1)] public Task Is_Wormhole() { - bool not_wh_result = _whEveMapper.IsWorhmole(SOLAR_SYSTEM_JITA_NAME); + bool not_wh_result = _whEveMapper.IsWormhole(SOLAR_SYSTEM_JITA_NAME); Assert.False(not_wh_result); - bool is_wh_result = _whEveMapper.IsWorhmole(SOLAR_SYSTEM_WH_NAME); + bool is_wh_result = _whEveMapper.IsWormhole(SOLAR_SYSTEM_WH_NAME); Assert.True(is_wh_result); + bool bad_result = _whEveMapper.IsWormhole("BAD_NAME"); + Assert.False(bad_result); + + bool bad_empty_result = _whEveMapper.IsWormhole(string.Empty); + Assert.False(bad_empty_result); + return Task.CompletedTask; } diff --git a/src/WHMapper.Tests/WHHelper/WHColorHelperTest.cs b/src/WHMapper.Tests/WHHelper/WHColorHelperTest.cs index 17fa7ca1..cd098937 100644 --- a/src/WHMapper.Tests/WHHelper/WHColorHelperTest.cs +++ b/src/WHMapper.Tests/WHHelper/WHColorHelperTest.cs @@ -168,11 +168,11 @@ public void Get_Link_Selected_Color() [Fact] public void Get_Node_Status_Color() { - Assert.Equal(NODE_STATUS_FRIENDLY_COLOR, _whHelper.GetNodeStatusColor(WHSystemStatusEnum.Friendly)); - Assert.Equal(NODE_STATUS_OCCUPIED_COLOR, _whHelper.GetNodeStatusColor(WHSystemStatusEnum.Occupied)); - Assert.Equal(NODE_STATUS_HOSTILE_COLOR, _whHelper.GetNodeStatusColor(WHSystemStatusEnum.Hostile)); - Assert.Equal(NODE_STATUS_UNKNOWN_COLOR, _whHelper.GetNodeStatusColor(WHSystemStatusEnum.Unknown)); - Assert.Equal(IWHColorHelper.DEFAULT_COLOR, _whHelper.GetNodeStatusColor((WHSystemStatusEnum)28)); + Assert.Equal(NODE_STATUS_FRIENDLY_COLOR, _whHelper.GetNodeStatusColor(WHSystemStatus.Friendly)); + Assert.Equal(NODE_STATUS_OCCUPIED_COLOR, _whHelper.GetNodeStatusColor(WHSystemStatus.Occupied)); + Assert.Equal(NODE_STATUS_HOSTILE_COLOR, _whHelper.GetNodeStatusColor(WHSystemStatus.Hostile)); + Assert.Equal(NODE_STATUS_UNKNOWN_COLOR, _whHelper.GetNodeStatusColor(WHSystemStatus.Unknown)); + Assert.Equal(IWHColorHelper.DEFAULT_COLOR, _whHelper.GetNodeStatusColor((WHSystemStatus)28)); } } diff --git a/src/WHMapper/Hubs/IWHMapperNotificationHub.cs b/src/WHMapper/Hubs/IWHMapperNotificationHub.cs index c1a8bcf8..67abd94e 100644 --- a/src/WHMapper/Hubs/IWHMapperNotificationHub.cs +++ b/src/WHMapper/Hubs/IWHMapperNotificationHub.cs @@ -19,7 +19,7 @@ public interface IWHMapperNotificationHub Task NotifyWormholeNameExtensionChanged(string username, int mapId, int wormholeId,bool increment); Task NotifyWormholeSignaturesChanged(string username, int mapId, int wormholeId); Task NotifyWormholeLockChanged(string username, int mapId, int wormholeId, bool locked); - Task NotifyWormholeSystemStatusChanged(string username, int mapId, int wormholeId, WHSystemStatusEnum systemStatus); + Task NotifyWormholeSystemStatusChanged(string username, int mapId, int wormholeId, WHSystemStatus systemStatus); } } diff --git a/src/WHMapper/Hubs/WHMapperNotificationHub.cs b/src/WHMapper/Hubs/WHMapperNotificationHub.cs index 9be6f521..7f4a908c 100644 --- a/src/WHMapper/Hubs/WHMapperNotificationHub.cs +++ b/src/WHMapper/Hubs/WHMapperNotificationHub.cs @@ -50,7 +50,6 @@ public override async Task OnConnectedAsync() public override async Task OnDisconnectedAsync(Exception? exception) { - string res = string.Empty; string userName = CurrentUser(); _connections.Remove(userName, Context.ConnectionId); @@ -78,7 +77,6 @@ public async Task SendUserPosition(string systemName) } await Clients.AllExcept(Context.ConnectionId).NotifyUserPosition(userName, systemName); - //await Clients.Caller.NotifyUsersPosition(_connectedUserPosition); } public async Task SendWormholeAdded(int mapId, int wowrmholeId) @@ -165,7 +163,7 @@ public async Task SendWormholeLockChanged(int mapId, int wormholeId, bool locked } } - public async Task SendWormholeSystemStatusChanged(int mapId, int wormholeId, WHSystemStatusEnum systemStatus) + public async Task SendWormholeSystemStatusChanged(int mapId, int wormholeId, WHSystemStatus systemStatus) { string userName = CurrentUser(); if (!string.IsNullOrEmpty(userName)) diff --git a/src/WHMapper/Models/Custom/Node/EveSystemNodeModel.cs b/src/WHMapper/Models/Custom/Node/EveSystemNodeModel.cs index 897c8754..4a14c4e4 100644 --- a/src/WHMapper/Models/Custom/Node/EveSystemNodeModel.cs +++ b/src/WHMapper/Models/Custom/Node/EveSystemNodeModel.cs @@ -20,7 +20,7 @@ public class EveSystemNodeModel : NodeModel private readonly WHSystem _wh; - private WHSystemStatusEnum _systemStatus; + private WHSystemStatus _systemStatus; public int IdWH { @@ -93,7 +93,7 @@ public new bool Locked } - public WHSystemStatusEnum SystemStatus + public WHSystemStatus SystemStatus { get { @@ -112,7 +112,7 @@ public WHSystemStatusEnum SystemStatus public string RegionName { get; private set; } public string ConstellationName { get; private set;} - public EveSystemType SystemType { get; private set; } = EveSystemType.None; + public EveSystemType SystemType { get; private set; } public WHEffect Effect { get; private set; } = WHEffect.None; public IList? EffectDetails { get; private set; } = null!; public IList? Statics { get; private set; } = null!; @@ -127,7 +127,7 @@ public EveSystemNodeModel(WHSystem wh, WHNote? note, string regionName, string c if(note != null) _systemStatus = note.SystemStatus; else - _systemStatus=WHSystemStatusEnum.Unknown; + _systemStatus=WHSystemStatus.Unknown; RegionName = regionName; ConstellationName = constellationName; @@ -151,7 +151,7 @@ public EveSystemNodeModel(WHSystem wh, WHNote? note, string regionName, string c if(note != null) _systemStatus = note.SystemStatus; else - _systemStatus=WHSystemStatusEnum.Unknown; + _systemStatus=WHSystemStatus.Unknown; RegionName = regionName; diff --git a/src/WHMapper/Models/DTO/EveAPI/Assets/Asset.cs b/src/WHMapper/Models/DTO/EveAPI/Assets/Asset.cs index 9de72d5c..96c71cd5 100644 --- a/src/WHMapper/Models/DTO/EveAPI/Assets/Asset.cs +++ b/src/WHMapper/Models/DTO/EveAPI/Assets/Asset.cs @@ -111,13 +111,13 @@ public class Asset public long ItemId { get; set; } [JsonPropertyName("location_flag")] - public string LocationFlag { get; set; } + public string? LocationFlag { get; set; } [JsonPropertyName("location_id")] public long LocationId { get; set; } [JsonPropertyName("location_type")] - public string LocationType { get; set; } + public string? LocationType { get; set; } [JsonPropertyName("quantity")] public int Quantity { get; set; } diff --git a/src/WHMapper/Models/DTO/EveMapper/Enums/EveSystemTypeEnums.cs b/src/WHMapper/Models/DTO/EveMapper/Enums/EveSystemTypeEnums.cs index 51241f92..3fcaea21 100644 --- a/src/WHMapper/Models/DTO/EveMapper/Enums/EveSystemTypeEnums.cs +++ b/src/WHMapper/Models/DTO/EveMapper/Enums/EveSystemTypeEnums.cs @@ -4,30 +4,27 @@ namespace WHMapper.Models.DTO.EveMapper.Enums { - public enum EveSystemType + public enum EveSystemType :int { - HS, - LS, - NS, + HS=7, + LS=8, + NS=9, [Description("T")] - Pochven, - C1, - C2, - C3, - C4, - C5, - C6, - C13, - C14, - C15, - C16, - C17, - C18, - Thera, - K162, - C123, - C45, - None + Pochven=25, + C1=1, + C2=2, + C3=3, + C4=4, + C5=5, + C6=6, + C13=13, + C14=14, + C15=15, + C16=16, + C17=17, + C18=18, + Thera=12, + None=-1 } public static class EveSystemTypeExtensions diff --git a/src/WHMapper/Models/Db/Enums/WHSystemStatusEnums.cs b/src/WHMapper/Models/Db/Enums/WHSystemStatusEnums.cs index 04b21a11..592370f5 100644 --- a/src/WHMapper/Models/Db/Enums/WHSystemStatusEnums.cs +++ b/src/WHMapper/Models/Db/Enums/WHSystemStatusEnums.cs @@ -1,7 +1,7 @@ using System; namespace WHMapper.Models.Db.Enums { - public enum WHSystemStatusEnum + public enum WHSystemStatus { Unknown, Friendly, diff --git a/src/WHMapper/Models/Db/WHNote.cs b/src/WHMapper/Models/Db/WHNote.cs index 76407a38..0bc5a2d7 100644 --- a/src/WHMapper/Models/Db/WHNote.cs +++ b/src/WHMapper/Models/Db/WHNote.cs @@ -15,25 +15,25 @@ public class WHNote [Required, StringLength(255, ErrorMessage = "Comment is too long.")] public String Comment { get; set; } = string.Empty; - public WHSystemStatusEnum SystemStatus { get; set; } = WHSystemStatusEnum.Unknown; + public WHSystemStatus SystemStatus { get; set; } = WHSystemStatus.Unknown; [Obsolete("EF Requires it")] protected WHNote() { } public WHNote(int soloarSystemId,string comment) - : this(soloarSystemId,WHSystemStatusEnum.Unknown,comment) + : this(soloarSystemId,WHSystemStatus.Unknown,comment) { } - public WHNote(int soloarSystemId, WHSystemStatusEnum systemStatus) + public WHNote(int soloarSystemId, WHSystemStatus systemStatus) :this(soloarSystemId,systemStatus,string.Empty) { } - public WHNote(int soloarSystemId, WHSystemStatusEnum systemStatus,string comment) + public WHNote(int soloarSystemId, WHSystemStatus systemStatus,string comment) { SoloarSystemId = soloarSystemId; SystemStatus = systemStatus; diff --git a/src/WHMapper/Pages/Mapper/Administration/Overview.cs b/src/WHMapper/Pages/Mapper/Administration/Overview.cs index b3d9b6a2..3a00ef52 100644 --- a/src/WHMapper/Pages/Mapper/Administration/Overview.cs +++ b/src/WHMapper/Pages/Mapper/Administration/Overview.cs @@ -181,7 +181,7 @@ private async Task DeleteAccess(int id) var options = new DialogOptions() { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - var dialog = DialogService.Show("Delete WHMapper Access", parameters, options); + var dialog = await DialogService.ShowAsync("Delete WHMapper Access", parameters, options); DialogResult result = await dialog.Result; if (result!=null && !result.Canceled) @@ -196,7 +196,7 @@ private async Task DeleteAdmin(int id) var options = new DialogOptions() { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - var dialog = DialogService.Show("Delete WHMapper Admin", parameters, options); + var dialog = await DialogService.ShowAsync("Delete WHMapper Admin", parameters, options); DialogResult result = await dialog.Result; if (result != null && !result.Canceled) diff --git a/src/WHMapper/Pages/Mapper/Notes/Overview.cs b/src/WHMapper/Pages/Mapper/Notes/Overview.cs index 7079ce9c..b812f57e 100644 --- a/src/WHMapper/Pages/Mapper/Notes/Overview.cs +++ b/src/WHMapper/Pages/Mapper/Notes/Overview.cs @@ -1,21 +1,17 @@ -using System.ComponentModel; -using System.Drawing; -using System.Runtime.Intrinsics.X86; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Web; using MudBlazor; using WHMapper.Models.Custom.Node; using WHMapper.Models.Db; using WHMapper.Models.Db.Enums; -using WHMapper.Models.DTO.EveMapper.Enums; using WHMapper.Repositories.WHNotes; -using WHMapper.Services.WHColor; namespace WHMapper.Pages.Mapper.Notes { [Authorize(Policy = "Access")] - public partial class Overview : ComponentBase + public partial class Overview : ComponentBase,IDisposable { private const string MSG_SOLAR_SYSTEM_COMMENT_AUTOSAVE_SUCCESS = "Solar system comment autosave successfull"; private const string MSG_SOLAR_SYSTEM_COMMENT_AUTOSAVE_ERROR = "Solar system comment autosave error"; @@ -27,10 +23,10 @@ public partial class Overview : ComponentBase private WHNote? _note = null!; private string _solarSystemComment = string.Empty; - private WHSystemStatusEnum _systemStatus = WHSystemStatusEnum.Unknown; + private WHSystemStatus _systemStatus = WHSystemStatus.Unknown; - private PeriodicTimer _timer = null!; - private CancellationTokenSource _cts = null!; + private PeriodicTimer? _timer; + private CancellationTokenSource? _cts; private string _previousValue = string.Empty; @@ -67,12 +63,11 @@ protected async override Task OnParametersSetAsync() } } - private Task OnNoteChanged() + protected Task OnNoteChanged() { if (_timer == null) { _timer = new PeriodicTimer(TimeSpan.FromMilliseconds(500)); - _cts = new CancellationTokenSource(); Task.Run(() => HandleTimerAsync()); } return Task.CompletedTask; @@ -87,9 +82,10 @@ private async Task HandleTimerAsync() try { + _cts = new CancellationTokenSource(); while (await _timer.WaitForNextTickAsync(_cts.Token)) { - if(string.IsNullOrEmpty(_solarSystemComment) && _systemStatus.Equals(WHSystemStatusEnum.Unknown)) + if(string.IsNullOrEmpty(_solarSystemComment) && _systemStatus.Equals(WHSystemStatus.Unknown)) { if(_note!=null) { @@ -113,7 +109,7 @@ private async Task HandleTimerAsync() } } - _cts.Cancel(); + await _cts.CancelAsync(); } else { @@ -170,7 +166,7 @@ private async Task HandleTimerAsync() } } - _cts.Cancel(); + await _cts.CancelAsync(); } else { @@ -179,8 +175,9 @@ private async Task HandleTimerAsync() } } } - catch(OperationCanceledException) + catch(OperationCanceledException oce) { + Logger.LogInformation(oce,"Operation canceled"); } catch (Exception ex) { @@ -188,12 +185,23 @@ private async Task HandleTimerAsync() } finally { - _timer = null!; - _cts = null!; + Dispose(true); _previousValue = string.Empty; } } } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + this._timer?.Dispose(); + this._cts?.Dispose(); + } } } \ No newline at end of file diff --git a/src/WHMapper/Pages/Mapper/Overview.cs b/src/WHMapper/Pages/Mapper/Overview.cs index f2319010..60b4a4f4 100644 --- a/src/WHMapper/Pages/Mapper/Overview.cs +++ b/src/WHMapper/Pages/Mapper/Overview.cs @@ -503,7 +503,7 @@ private async Task InitNotificationHub() }); - _hubConnection.On("NotifyWormholeSystemStatusChanged", async (user, mapId, wormholeId, systemStatus) => + _hubConnection.On("NotifyWormholeSystemStatusChanged", async (user, mapId, wormholeId, systemStatus) => { try { @@ -619,7 +619,7 @@ private async Task NotifyWormholeLockChanged(int mapId, int wormholeId, bool loc } } - private async Task NotifyWormholeSystemStatusChanged(int mapId, int wormholeId, WHSystemStatusEnum systemStatus) + private async Task NotifyWormholeSystemStatusChanged(int mapId, int wormholeId, WHSystemStatus systemStatus) { if (_hubConnection is not null) { @@ -1569,7 +1569,7 @@ private async Task ToggleSystemLock() } } - private async Task SetSelectedSystemStatus(WHSystemStatusEnum systemStatus) + private async Task SetSelectedSystemStatus(WHSystemStatus systemStatus) { try { diff --git a/src/WHMapper/Pages/Mapper/Overview.razor b/src/WHMapper/Pages/Mapper/Overview.razor index 0e45bd05..e4afac26 100644 --- a/src/WHMapper/Pages/Mapper/Overview.razor +++ b/src/WHMapper/Pages/Mapper/Overview.razor @@ -56,10 +56,10 @@ System Status - Unknown - Occupied - Hostile - Friendly + Unknown + Occupied + Hostile + Friendly } diff --git a/src/WHMapper/Pages/Mapper/RoutePlanner/Overview.cs b/src/WHMapper/Pages/Mapper/RoutePlanner/Overview.cs index b0426aa1..cc7c1637 100644 --- a/src/WHMapper/Pages/Mapper/RoutePlanner/Overview.cs +++ b/src/WHMapper/Pages/Mapper/RoutePlanner/Overview.cs @@ -155,7 +155,7 @@ private async Task AddRoute() }; var parameters = new DialogParameters(); - var dialog = DialogService.Show("Add Route", parameters, disableBackdropClick); + var dialog = await DialogService.ShowAsync("Add Route", parameters, disableBackdropClick); DialogResult result = await dialog.Result; if (!result.Canceled) @@ -169,7 +169,7 @@ private async Task DelRoute(EveRoute route) { var parameters = new DialogParameters(); parameters.Add("RouteId", route.Id); - var dialog = DialogService.Show("Delete Route", parameters); + var dialog = await DialogService.ShowAsync("Delete Route", parameters); DialogResult result = await dialog.Result; if (!result.Canceled) diff --git a/src/WHMapper/Pages/Mapper/Signatures/Overview.cs b/src/WHMapper/Pages/Mapper/Signatures/Overview.cs index 63c43c93..aa29216d 100644 --- a/src/WHMapper/Pages/Mapper/Signatures/Overview.cs +++ b/src/WHMapper/Pages/Mapper/Signatures/Overview.cs @@ -24,7 +24,7 @@ namespace WHMapper.Pages.Mapper.Signatures { [Authorize(Policy = "Access")] - public partial class Overview : ComponentBase,IAsyncDisposable + public partial class Overview : ComponentBase,IDisposable { [Inject] public ILogger Logger { get; set; } = null!; @@ -42,11 +42,10 @@ public partial class Overview : ComponentBase,IAsyncDisposable private ISnackbar Snackbar { get; set; } = null!; [Inject] - private IEveMapperHelper EveMapperHelperServices { get; set; } = null!; + protected IEveMapperHelper EveMapperHelperServices { get; set; } = null!; - [Inject] - private IWHColorHelper WHColorHelper { get; set; } = null!; + protected IWHColorHelper WHColorHelper { get; set; } = null!; private IEnumerable Signatures { get; set; } = null!; @@ -59,17 +58,18 @@ public partial class Overview : ComponentBase,IAsyncDisposable public HubConnection NotificationHub { private get; set; } = null!; - private WHSignature _selectedSignature = null!; + protected WHSignature? _selectedSignature; private WHSignature _signatureBeforeEdit = null!; - private bool _isEditingSignature = false; + protected bool _isEditingSignature = false; private PeriodicTimer? _timer; private CancellationTokenSource? _cts; - private DateTime _currentDateTime; + protected DateTime _currentDateTime; private MudTable _signatureTable { get; set; } =null!; + private string? _currentUser; protected override Task OnParametersSetAsync() @@ -97,18 +97,22 @@ private async Task HandleTimerAsync() }); } } - catch (OperationCanceledException) + catch (OperationCanceledException oce) { - Logger.LogInformation("Timer canceled"); + Logger.LogInformation(oce,"Operation canceled"); } catch (Exception ex) { Logger.LogError(ex, "Error in timer"); } + finally + { + Dispose(true); + } } } - private string DateDiff(DateTime startTime, DateTime endTime) + protected string DateDiff(DateTime startTime, DateTime endTime) { TimeSpan span = startTime.Subtract(endTime); if (span.Days > 0) @@ -121,52 +125,39 @@ private string DateDiff(DateTime startTime, DateTime endTime) return String.Format("{0}s", span.Seconds); } - private string GetDisplayText(Enum value) + protected string GetDisplayText(Enum value) { - if (value == null) - throw new ArgumentNullException(nameof(value)); + ArgumentNullException.ThrowIfNull(value, nameof(value)); - System.Type type = value.GetType(); - if (System.Attribute.IsDefined(type, typeof(FlagsAttribute))) - { - var sb = new System.Text.StringBuilder(); + var type = value.GetType(); + return System.Attribute.IsDefined(type, typeof(FlagsAttribute)) ? GetFlagsDisplayText(value, type) : GetFieldDisplayName(value); + } - foreach (Enum field in Enum.GetValues(type)) - { - if (Convert.ToInt64(field) == 0 && Convert.ToInt32(value) > 0) - continue; + private string GetFlagsDisplayText(Enum value, System.Type type) + { + var displayTexts = Enum.GetValues(type).Cast() + .Where(field => value.HasFlag(field) && Convert.ToInt64(field) != 0) + .Select(GetFieldDisplayName); - if (value.HasFlag(field)) - { - if (sb.Length > 0) - sb.Append(", "); + return string.Join(", ", displayTexts); + } - var f = type.GetField(field.ToString()); - var da = (DisplayAttribute)System.Attribute.GetCustomAttribute(f, typeof(DisplayAttribute)); - sb.Append(da?.ShortName ?? da?.Name ?? field.ToString()); - } - } + private string GetFieldDisplayName(Enum value) + { + var field = value.GetType().GetField(value.ToString()); + if (field is null) + return value.ToString(); + + var attribute = System.Attribute.GetCustomAttribute(field, typeof(DisplayAttribute)); + if(attribute is null) + return value.ToString(); - return sb.ToString(); - } - else - { - var f = type.GetField(value.ToString()); - if (f != null) - { - var da = (DisplayAttribute)System.Attribute.GetCustomAttribute(f, typeof(DisplayAttribute)); - if (da != null) - { - var res = da.ShortName ?? da.Name; - return (res==null ? string.Empty : res); - } - } - } + DisplayAttribute displayAttribute = (DisplayAttribute)attribute!; - return value.ToString(); + return displayAttribute.ShortName ?? displayAttribute.Name ?? value.ToString(); } - private async Task OpenImportDialog() + protected async Task OpenImportDialog() { DialogOptions disableBackdropClick = new DialogOptions() { @@ -178,7 +169,7 @@ private async Task OpenImportDialog() var parameters = new DialogParameters(); parameters.Add("CurrentSystemNodeId", CurrentSystemNodeId); - var dialog = DialogService.Show("Import Scan Dialog", parameters, disableBackdropClick); + var dialog = await DialogService.ShowAsync("Import Scan Dialog", parameters, disableBackdropClick); DialogResult result = await dialog.Result; if (!result.Canceled && CurrentMapId!=null && CurrentSystemNodeId!=null) @@ -191,6 +182,9 @@ private async Task OpenImportDialog() public async Task Restore() { + if(String.IsNullOrEmpty(_currentUser)) + _currentUser = await UserInfos.GetUserName(); + if(_signatureTable is not null) _signatureTable.SetEditingItem(null); @@ -209,7 +203,7 @@ public async Task Restore() } } - private async Task DeleteSignature(int id) + protected async Task DeleteSignature(int id) { if(CurrentSystemNodeId!=null) { @@ -219,10 +213,10 @@ private async Task DeleteSignature(int id) var options = new DialogOptions() { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - var dialog = DialogService.Show("Delete", parameters, options); + var dialog = await DialogService.ShowAsync("Delete", parameters, options); DialogResult result = await dialog.Result; - if (!result.Canceled && CurrentMapId!=null && CurrentSystemNodeId!=null) + if (!result.Canceled && CurrentMapId!=null) { await NotifyWormholeSignaturesChanged(CurrentMapId.Value, CurrentSystemNodeId.Value); await Restore(); @@ -236,7 +230,7 @@ private async Task DeleteSignature(int id) } - private async Task DeleteAllSignature() + protected async Task DeleteAllSignature() { var parameters = new DialogParameters(); if(CurrentSystemNodeId!=null && CurrentMapId!=null) @@ -250,7 +244,7 @@ private async Task DeleteAllSignature() var options = new DialogOptions() { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; - var dialog = DialogService.Show("Delete", parameters, options); + var dialog = await DialogService.ShowAsync("Delete", parameters, options); DialogResult result = await dialog.Result; if (!result.Canceled && CurrentMapId != null && CurrentSystemNodeId != null) @@ -260,7 +254,7 @@ private async Task DeleteAllSignature() } } - private void BackupSingature(object element) + protected void BackupSingature(object element) { _isEditingSignature = true; @@ -274,10 +268,8 @@ private void BackupSingature(object element) StateHasChanged(); } - private void ResetSingatureToOriginalValues(object element) + protected void ResetSingatureToOriginalValues(object element) { - - ((WHSignature)element).Name = _signatureBeforeEdit.Name; ((WHSignature)element).Group = _signatureBeforeEdit.Group; ((WHSignature)element).Type = _signatureBeforeEdit.Type; @@ -286,42 +278,44 @@ private void ResetSingatureToOriginalValues(object element) StateHasChanged(); } - private async void SignatiureHasBeenCommitted(object element) + protected void SignatiureHasBeenCommitted(object element) { ((WHSignature)element).Updated = DateTime.UtcNow; - ((WHSignature)element).UpdatedBy = await UserInfos.GetUserName(); + ((WHSignature)element).UpdatedBy = _currentUser; - var res = await DbWHSignatures.Update(((WHSignature)element).Id, ((WHSignature)element)); + Task.Run(() => UpdateSignature(element)); + + _isEditingSignature = false; + StateHasChanged(); + } + private async Task UpdateSignature(object element) + { + var res = await DbWHSignatures.Update(((WHSignature)element).Id, ((WHSignature)element)); if(res!=null && res.Id== ((WHSignature)element).Id) Snackbar.Add("Signature successfully updated", Severity.Success); else Snackbar.Add("No signature updated", Severity.Error); - - _isEditingSignature = false; - StateHasChanged(); } - private void Cancel() + private async Task NotifyWormholeSignaturesChanged(int mapId, int wormholeId) { - _cts?.Cancel(); + if (NotificationHub is not null) + { + await NotificationHub.SendAsync("SendWormholeSignaturesChanged", mapId, wormholeId); + } } - public ValueTask DisposeAsync() + public void Dispose() { - Cancel(); - _timer?.Dispose(); - + Dispose(true); GC.SuppressFinalize(this); - return ValueTask.CompletedTask; } - private async Task NotifyWormholeSignaturesChanged(int mapId, int wormholeId) + protected virtual void Dispose(bool disposing) { - if (NotificationHub is not null) - { - await NotificationHub.SendAsync("SendWormholeSignaturesChanged", mapId, wormholeId); - } + this._timer?.Dispose(); + this._cts?.Dispose(); } } } diff --git a/src/WHMapper/Repositories/ADefaultRepository.cs b/src/WHMapper/Repositories/ADefaultRepository.cs index 04a7748a..a3f79da1 100644 --- a/src/WHMapper/Repositories/ADefaultRepository.cs +++ b/src/WHMapper/Repositories/ADefaultRepository.cs @@ -2,8 +2,8 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; - +using Microsoft.EntityFrameworkCore; + namespace WHMapper.Repositories { @@ -24,8 +24,8 @@ public abstract class ADefaultRepository where C : DbContext protected abstract Task AUpdate(U id, T item); protected abstract Task ADeleteById(U id); - public ADefaultRepository(ILogger logger,IDbContextFactory dbContext) - { + protected ADefaultRepository(ILogger logger,IDbContextFactory dbContext) + { _logger = logger; _contextFactory = dbContext; diff --git a/src/WHMapper/Repositories/WHAccesses/WHAccessRepository.cs b/src/WHMapper/Repositories/WHAccesses/WHAccessRepository.cs index 6aad5ced..ba56c47a 100644 --- a/src/WHMapper/Repositories/WHAccesses/WHAccessRepository.cs +++ b/src/WHMapper/Repositories/WHAccesses/WHAccessRepository.cs @@ -18,7 +18,8 @@ public WHAccessRepository(ILogger logger,IDbContextFactory ACreate(WHAccess item) { - using (var context = _contextFactory.CreateDbContext()) + + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -29,7 +30,7 @@ public WHAccessRepository(ILogger logger,IDbContextFactory logger,IDbContextFactory ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { var deleteRow = await context.DbWHAccesses.Where(x => x.Id == id).ExecuteDeleteAsync(); @@ -51,7 +52,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHAccesses.ToListAsync(); } @@ -59,7 +60,7 @@ protected override async Task ADeleteById(int id) protected override async Task AGetById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHAccesses.FindAsync(id); } @@ -67,7 +68,7 @@ protected override async Task ADeleteById(int id) protected override async Task AUpdate(int id, WHAccess item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -80,7 +81,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to update WHAccess : {0}", item.EveEntityName)); + _logger.LogError(ex, "Impossible to update WHAccess : {EveEntityName}", item.EveEntityName); return null; } } diff --git a/src/WHMapper/Repositories/WHAdmins/WHAdminRepository.cs b/src/WHMapper/Repositories/WHAdmins/WHAdminRepository.cs index 4890f098..18865fb6 100644 --- a/src/WHMapper/Repositories/WHAdmins/WHAdminRepository.cs +++ b/src/WHMapper/Repositories/WHAdmins/WHAdminRepository.cs @@ -17,7 +17,7 @@ public WHAdminRepository(ILogger logger,IDbContextFactory ACreate(WHAdmin item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -28,7 +28,7 @@ public WHAdminRepository(ILogger logger,IDbContextFactory logger,IDbContextFactory ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { var deleteRow = await context.DbWHAdmins.Where(x => x.Id == id).ExecuteDeleteAsync(); if (deleteRow > 0) @@ -49,7 +49,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHAdmins.ToListAsync(); } @@ -57,7 +57,7 @@ protected override async Task ADeleteById(int id) protected override async Task AGetById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHAdmins.FindAsync(id); } @@ -66,7 +66,7 @@ protected override async Task ADeleteById(int id) protected override async Task AUpdate(int id, WHAdmin item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -79,7 +79,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to update WHAdmin access : {0}", item.EveCharacterName)); + _logger.LogError(ex, "Impossible to update WHAdmin access : {EveCharacterName}", item.EveCharacterName); return null; } } diff --git a/src/WHMapper/Repositories/WHJumpLogs/WHJumpLogRepository.cs b/src/WHMapper/Repositories/WHJumpLogs/WHJumpLogRepository.cs index f6fb5a56..cfc38cae 100644 --- a/src/WHMapper/Repositories/WHJumpLogs/WHJumpLogRepository.cs +++ b/src/WHMapper/Repositories/WHJumpLogs/WHJumpLogRepository.cs @@ -15,7 +15,7 @@ public WHJumpLogRepository(ILogger logger, IDbContextFactor protected override async Task ACreate(WHJumpLog item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -26,7 +26,7 @@ public WHJumpLogRepository(ILogger logger, IDbContextFactor } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to create WHJumpLog : {0}", item.Id)); + _logger.LogError(ex, "Impossible to create WHJumpLog : {Id}", item.Id); return null; } } @@ -34,7 +34,7 @@ public WHJumpLogRepository(ILogger logger, IDbContextFactor protected override async Task ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { var deleteRow = await context.DbWHJumpLogs.Where(x => x.Id == id).ExecuteDeleteAsync(); if (deleteRow > 0) @@ -46,7 +46,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHJumpLogs.ToListAsync(); } @@ -54,7 +54,7 @@ protected override async Task ADeleteById(int id) protected override async Task AGetById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHJumpLogs.FirstOrDefaultAsync(x => x.Id == id); } @@ -75,7 +75,7 @@ protected override async Task ADeleteById(int id) return null; } - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -85,7 +85,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to update WHJumpLog : {0}", item.Id)); + _logger.LogError(ex,"Impossible to update WHJumpLog : {Id}", item.Id); return null; } } diff --git a/src/WHMapper/Repositories/WHMaps/WHMapRepository.cs b/src/WHMapper/Repositories/WHMaps/WHMapRepository.cs index 4fbbd301..af109b34 100644 --- a/src/WHMapper/Repositories/WHMaps/WHMapRepository.cs +++ b/src/WHMapper/Repositories/WHMaps/WHMapRepository.cs @@ -19,7 +19,7 @@ public WHMapRepository(ILogger logger, IDbContextFactory ACreate(WHMap item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -30,7 +30,7 @@ public WHMapRepository(ILogger logger, IDbContextFactory logger, IDbContextFactory ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { var deleteRow = await context.DbWHMaps.Where(x => x.Id == id).ExecuteDeleteAsync(); if (deleteRow > 0) @@ -51,7 +51,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { if (context.DbWHMaps.Count() == 0) return await context.DbWHMaps.OrderBy(x => x.Name).ToListAsync(); @@ -66,7 +66,7 @@ protected override async Task ADeleteById(int id) protected override async Task AGetById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHMaps .Include(x => x.WHSystems) @@ -78,7 +78,7 @@ protected override async Task ADeleteById(int id) protected override async Task AUpdate(int id, WHMap item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -91,7 +91,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to update WHMap : {0}", item.Name)); + _logger.LogError(ex, "Impossible to update WHMap : {Name}", item.Name); return null; } } diff --git a/src/WHMapper/Repositories/WHNotes/WHNoteRepository.cs b/src/WHMapper/Repositories/WHNotes/WHNoteRepository.cs index 7194d7fc..6dd26757 100644 --- a/src/WHMapper/Repositories/WHNotes/WHNoteRepository.cs +++ b/src/WHMapper/Repositories/WHNotes/WHNoteRepository.cs @@ -17,7 +17,7 @@ public WHNoteRepository(ILogger logger, IDbContextFactory ACreate(WHNote item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -28,7 +28,7 @@ public WHNoteRepository(ILogger logger, IDbContextFactory logger, IDbContextFactory ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { int deleteRow = await context.DbWHNotes.Where(x => x.Id == id).ExecuteDeleteAsync(); if (deleteRow > 0) @@ -48,7 +48,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHNotes.ToListAsync(); } @@ -56,7 +56,7 @@ protected override async Task ADeleteById(int id) protected override async Task AGetById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHNotes.SingleOrDefaultAsync(x => x.Id == id); } @@ -77,7 +77,7 @@ protected override async Task ADeleteById(int id) return null; } - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -87,7 +87,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to udpate WHNote, Solar System Id : {0}", item.SoloarSystemId)); + _logger.LogError(ex, "Impossible to udpate WHNote, Solar System Id : {SoloarSystemId}", item.SoloarSystemId); return null; } } @@ -95,7 +95,7 @@ protected override async Task ADeleteById(int id) public async Task GetBySolarSystemId(int solardSystemId) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHNotes.SingleOrDefaultAsync(x => x.SoloarSystemId == solardSystemId); } diff --git a/src/WHMapper/Repositories/WHRoutes/WHRouteRepository.cs b/src/WHMapper/Repositories/WHRoutes/WHRouteRepository.cs index f6c1610a..ade97e06 100644 --- a/src/WHMapper/Repositories/WHRoutes/WHRouteRepository.cs +++ b/src/WHMapper/Repositories/WHRoutes/WHRouteRepository.cs @@ -14,7 +14,7 @@ public WHRouteRepository(ILogger logger, IDbContextFactory> GetRoutesByEveEntityId(int eveEntityId) { - using(var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHRoutes.Where(x => x.EveEntityId == eveEntityId).ToListAsync(); } @@ -22,7 +22,7 @@ public async Task> GetRoutesByEveEntityId(int eveEntityId) public async Task> GetRoutesForAll() { - using(var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHRoutes.Where(x => x.EveEntityId==null).ToListAsync(); } @@ -30,7 +30,7 @@ public async Task> GetRoutesForAll() protected override async Task ACreate(WHRoute item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -41,7 +41,7 @@ public async Task> GetRoutesForAll() } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to create WHRoute : {0}", item.SolarSystemId)); + _logger.LogError(ex, "Impossible to create WHRoute : {SolarSystemId}", item.SolarSystemId); return null; } } @@ -49,7 +49,7 @@ public async Task> GetRoutesForAll() protected override async Task ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { int rowDeleted = await context.DbWHRoutes.Where(x => x.Id == id).ExecuteDeleteAsync(); if (rowDeleted > 0) @@ -61,7 +61,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { if (context.DbWHRoutes.Count() == 0) return await context.DbWHRoutes.ToListAsync(); @@ -73,7 +73,7 @@ protected override async Task ADeleteById(int id) protected override async Task AGetById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHRoutes.SingleOrDefaultAsync(x => x.Id == id); } @@ -93,7 +93,7 @@ protected override async Task ADeleteById(int id) return null; } - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -104,7 +104,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to update WHRoute : {0}", item.SolarSystemId)); + _logger.LogError(ex, "Impossible to update WHRoute : {SolarSystemId}", item.SolarSystemId); return null; } } diff --git a/src/WHMapper/Repositories/WHSignatures/WHSignatureRepository.cs b/src/WHMapper/Repositories/WHSignatures/WHSignatureRepository.cs index 74e8abad..5f2b79e0 100644 --- a/src/WHMapper/Repositories/WHSignatures/WHSignatureRepository.cs +++ b/src/WHMapper/Repositories/WHSignatures/WHSignatureRepository.cs @@ -20,7 +20,7 @@ public WHSignatureRepository(ILogger logger,IDbContextFac protected override async Task ACreate(WHSignature item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -31,7 +31,7 @@ public WHSignatureRepository(ILogger logger,IDbContextFac } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to create WHSignature : {0}", item.Name)); + _logger.LogError(ex, "Impossible to create WHSignature : {Name}", item.Name); return null; } } @@ -39,7 +39,7 @@ public WHSignatureRepository(ILogger logger,IDbContextFac protected override async Task ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { int rowDeleted = await context.DbWHSignatures.Where(x => x.Id == id).ExecuteDeleteAsync(); if (rowDeleted > 0) @@ -51,7 +51,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { if (context.DbWHSignatures.Count() == 0) return await context.DbWHSignatures.ToListAsync(); @@ -63,7 +63,7 @@ protected override async Task ADeleteById(int id) protected override async Task AGetById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHSignatures.SingleOrDefaultAsync(x => x.Id == id);; } @@ -71,7 +71,7 @@ protected override async Task ADeleteById(int id) protected override async Task AUpdate(int id, WHSignature item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -84,7 +84,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to update WHSignature : {0}", item.Name)); + _logger.LogError(ex, "Impossible to update WHSignature : {Name}", item.Name); return null; } } @@ -92,7 +92,7 @@ protected override async Task ADeleteById(int id) public async Task GetByName(string name) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHSignatures.FirstOrDefaultAsync(x => x.Name == name); } @@ -101,7 +101,7 @@ protected override async Task ADeleteById(int id) public async Task?> Update(IEnumerable whSignatures) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -125,7 +125,7 @@ protected override async Task ADeleteById(int id) public async Task?> GetByWHId(int whid) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { if (context.DbWHSignatures.Count() == 0) return await context.DbWHSignatures.ToListAsync(); @@ -139,7 +139,7 @@ protected override async Task ADeleteById(int id) public async Task DeleteByWHId(int whid) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { int rowDeleted = await context.DbWHSignatures.Where(x => x.WHId == whid).ExecuteDeleteAsync(); if (rowDeleted > 0) @@ -151,7 +151,7 @@ public async Task DeleteByWHId(int whid) public async Task?> Create(IEnumerable whSignatures) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { diff --git a/src/WHMapper/Repositories/WHSystemLinks/WHSystemLinkRepository.cs b/src/WHMapper/Repositories/WHSystemLinks/WHSystemLinkRepository.cs index d8e422e3..8c4543d7 100644 --- a/src/WHMapper/Repositories/WHSystemLinks/WHSystemLinkRepository.cs +++ b/src/WHMapper/Repositories/WHSystemLinks/WHSystemLinkRepository.cs @@ -18,7 +18,7 @@ public WHSystemLinkRepository(ILogger logger,IDbContextF protected override async Task ACreate(WHSystemLink item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -29,7 +29,7 @@ public WHSystemLinkRepository(ILogger logger,IDbContextF } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to create WHSystemLink From/To : {0}/{1}", item.IdWHSystemFrom,item.IdWHSystemTo)); + _logger.LogError(ex, "Impossible to create WHSystemLink From/To : {IdWHSystemFrom}/{IdWHSystemTo}", item.IdWHSystemFrom,item.IdWHSystemTo); return null; } } @@ -37,7 +37,7 @@ public WHSystemLinkRepository(ILogger logger,IDbContextF protected override async Task ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { int rowDeleted = await context.DbWHSystemLinks.Where(x => x.Id == id).ExecuteDeleteAsync(); if (rowDeleted > 0) @@ -49,7 +49,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { if (context.DbWHSystemLinks.Count() == 0) return await context.DbWHSystemLinks.ToListAsync(); @@ -62,7 +62,7 @@ protected override async Task ADeleteById(int id) protected override async Task AGetById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { return await context.DbWHSystemLinks.Include(x => x.JumpHistory).SingleOrDefaultAsync(x => x.Id == id); } @@ -70,7 +70,7 @@ protected override async Task ADeleteById(int id) protected override async Task AUpdate(int id, WHSystemLink item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -83,7 +83,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to update WHSystemLink From/To : {0}/{1}", item.IdWHSystemFrom,item.IdWHSystemTo)); + _logger.LogError(ex, "Impossible to update WHSystemLink From/To : {IdWHSystemFrom}/{IdWHSystemTo}", item.IdWHSystemFrom,item.IdWHSystemTo); return null; } } diff --git a/src/WHMapper/Repositories/WHSystems/WHSystemRepository.cs b/src/WHMapper/Repositories/WHSystems/WHSystemRepository.cs index 7d34492d..b0040f45 100644 --- a/src/WHMapper/Repositories/WHSystems/WHSystemRepository.cs +++ b/src/WHMapper/Repositories/WHSystems/WHSystemRepository.cs @@ -20,7 +20,7 @@ public WHSystemRepository(ILogger logger,IDbContextFactory ACreate(WHSystem item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -31,7 +31,7 @@ public WHSystemRepository(ILogger logger,IDbContextFactory logger,IDbContextFactory ADeleteById(int id) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { int deleteRow = await context.DbWHSystems.Where(x => x.Id == id).ExecuteDeleteAsync(); if (deleteRow > 0) @@ -51,7 +51,7 @@ protected override async Task ADeleteById(int id) protected override async Task?> AGetAll() { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { if (context.DbWHSystems.Count() == 0) return await context.DbWHSystems.ToListAsync(); @@ -75,7 +75,7 @@ protected override async Task ADeleteById(int id) protected override async Task AUpdate(int id, WHSystem item) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { try { @@ -88,7 +88,7 @@ protected override async Task ADeleteById(int id) } catch (Exception ex) { - _logger.LogError(ex, String.Format("Impossible to udpate WHSystem : {0}", item.Name)); + _logger.LogError(ex, "Impossible to udpate WHSystem : {Name}", item.Name); return null; } } @@ -96,7 +96,7 @@ protected override async Task ADeleteById(int id) public async Task GetByName(string name) { - using (var context = _contextFactory.CreateDbContext()) + using (var context = await _contextFactory.CreateDbContextAsync()) { //return await context.DbWHSystems.Include(x => x.WHSignatures).FirstOrDefaultAsync(x => x.Name == name); return await context.DbWHSystems.FirstOrDefaultAsync(x => x.Name == name); diff --git a/src/WHMapper/Services/EveMapper/EveMapperHelper.cs b/src/WHMapper/Services/EveMapper/EveMapperHelper.cs index 29dc1b1e..89ae7673 100644 --- a/src/WHMapper/Services/EveMapper/EveMapperHelper.cs +++ b/src/WHMapper/Services/EveMapper/EveMapperHelper.cs @@ -535,7 +535,7 @@ private WHEffect GetWHEffectValueDescription(string description) throw new ArgumentException("Not found.", nameof(description)); } - public bool IsWorhmole(string systemName) + public bool IsWormhole(string systemName) { try { @@ -565,62 +565,67 @@ public async Task GetWHClass(SystemEntity whSystem) return await GetWHClass(system_region!.Name, system_constellation!.Name, whSystem.Name,whSystem.SecurityStatus); } - public Task GetWHClass(string regionName, string constellationName, string systemName, float securityStatus) + public Task GetWHClass(string regionName, string constellationName, string systemName, float securityStatus) + { + if (IsWormhole(systemName)) { - if(IsWorhmole(systemName)) - { - switch (regionName.First()) - { - case 'A': - return Task.FromResult(EveSystemType.C1); - case 'B': - return Task.FromResult(EveSystemType.C2); - case 'C': - return Task.FromResult(EveSystemType.C3); - case 'D': - return Task.FromResult(EveSystemType.C4); - case 'E': - return Task.FromResult(EveSystemType.C5); - case 'F': - return Task.FromResult(EveSystemType.C6); - case 'G': - return Task.FromResult(EveSystemType.Thera); - case 'H': - return Task.FromResult(EveSystemType.C13); - case 'K': - if (systemName == C14_NAME) - return Task.FromResult(EveSystemType.C14); - else if (systemName == C15_NAME) - return Task.FromResult(EveSystemType.C15); - else if (systemName == C16_NAME) - return Task.FromResult(EveSystemType.C16); - else if (systemName == C17_NAME) - return Task.FromResult(EveSystemType.C17); - else if (systemName == C18_NAME) - return Task.FromResult(EveSystemType.C18); - else - return Task.FromResult(EveSystemType.None); - default: - return Task.FromResult(EveSystemType.None); - } - } - else if (regionName == REGION_POCHVVEN_NAME)//trig system - return Task.FromResult(EveSystemType.Pochven); - else - { - if (securityStatus >= 0.5) - return Task.FromResult(EveSystemType.HS); - else if (securityStatus < 0.5 && securityStatus > 0) - return Task.FromResult(EveSystemType.LS); - else - return Task.FromResult(EveSystemType.NS); - } + return Task.FromResult(GetWormholeSystemType(regionName, systemName)); + } + else if (regionName == REGION_POCHVVEN_NAME) // Trig system + { + return Task.FromResult(EveSystemType.Pochven); } + else + { + return Task.FromResult(GetKSpaceSystemType(securityStatus)); + } + } + + private EveSystemType GetWormholeSystemType(string regionName, string systemName) + { + var firstChar = regionName.FirstOrDefault(); + return firstChar switch + { + 'A' => EveSystemType.C1, + 'B' => EveSystemType.C2, + 'C' => EveSystemType.C3, + 'D' => EveSystemType.C4, + 'E' => EveSystemType.C5, + 'F' => EveSystemType.C6, + 'G' => EveSystemType.Thera, + 'H' => EveSystemType.C13, + 'K' => GetSpecialWormholeSystemType(systemName), + _ => EveSystemType.None, + }; + } + + private EveSystemType GetSpecialWormholeSystemType(string systemName) + { + return systemName switch + { + C14_NAME => EveSystemType.C14, + C15_NAME => EveSystemType.C15, + C16_NAME => EveSystemType.C16, + C17_NAME => EveSystemType.C17, + C18_NAME => EveSystemType.C18, + _ => EveSystemType.None, + }; + } + + private EveSystemType GetKSpaceSystemType(float securityStatus) + { + if (securityStatus >= 0.5) + return EveSystemType.HS; + else if (securityStatus < 0.5 && securityStatus > 0) + return EveSystemType.LS; + else + return EveSystemType.NS; + } private async Task GetSystemEffect(string systemName) { WHEffect effect = WHEffect.None; - if (IsWorhmole(systemName))//WH system + if (IsWormhole(systemName))//WH system { IEnumerable? sdeWormholesInfos = await _sdeServices!.SearchSystem(systemName); SDESolarSystem? sdeInfos = sdeWormholesInfos?.FirstOrDefault(); @@ -677,7 +682,7 @@ public async Task DefineEveSystemNodeModel(WHSystem wh) var note = await _noteServices.GetBySolarSystemId(system.Id); - if (IsWorhmole(wh.Name))//WH system + if (IsWormhole(wh.Name))//WH system { EveSystemType whClass = await GetWHClass(system_region!.Name, system_constellation.Name, system.Name,system.SecurityStatus); WHEffect whEffect = await GetSystemEffect(system.Name); @@ -709,7 +714,9 @@ private async Task InitWormholeTypeList() { _logger?.LogInformation("Init wormhole type list"); - GroupEntity whGroup = await _eveMapperEntity.GetGroup(GROUPE_WORMHOLE_ID); + GroupEntity? whGroup = await _eveMapperEntity.GetGroup(GROUPE_WORMHOLE_ID); + if(whGroup==null) + throw new InvalidDataException("Wormhole group not found"); await Parallel.ForEachAsync(whGroup!.Types, _options, async (whTypeId, token) => { @@ -731,66 +738,21 @@ private async Task InitWormholeTypeList() _whTypes.Add(new WormholeType("K162", EveSystemType.LS, null)); _whTypes.Add(new WormholeType("K162", EveSystemType.NS, null)); break; - case 1: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C1, null)); - break; - case 2: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C2, null)); - break; - case 3: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C3, null)); - break; - case 4: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C4, null)); - break; - case 5: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C5, null)); - break; - case 6: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C6, null)); - break; - case 7: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.HS, null)); - break; - case 8: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.LS, null)); - break; - case 9: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.NS, null)); - break; - case 10: case 11: //QA WH A abd QA WH B, unused WH break; - - case 12: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.Thera, null)); - break; - case 13: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C13, null)); - break; - case 14: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C14, null)); - break; - case 15: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C15, null)); - break; - case 16: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C16, null)); - break; - case 17: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C17, null)); - break; - case 18: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.C18, null)); - break; - case 25: - _whTypes.Add(new WormholeType(whType.Name, EveSystemType.Pochven, null)); - break; - default: - _logger?.LogWarning("Unknow wormhole type"); + + int sys_type_value=(int)whType.SystemTypeValue; + if (Enum.IsDefined(typeof(EveSystemType), sys_type_value)) + { + _whTypes.Add(new WormholeType(whType.Name, (EveSystemType)whType.SystemTypeValue, null)); + } + else + { + _logger?.LogWarning("Unknown wormhole type"); + } break; } } diff --git a/src/WHMapper/Services/EveMapper/EveMapperTracker.cs b/src/WHMapper/Services/EveMapper/EveMapperTracker.cs index d37d18f3..43582940 100644 --- a/src/WHMapper/Services/EveMapper/EveMapperTracker.cs +++ b/src/WHMapper/Services/EveMapper/EveMapperTracker.cs @@ -75,41 +75,45 @@ public Task StopTracking() return Task.CompletedTask; } - private async void OnTimedEvent(object? sender, ElapsedEventArgs e) + private async void OnTimedEvent(object? sender, ElapsedEventArgs e) { try { var state = await _authState.GetAuthenticationStateAsync(); - if (!string.IsNullOrEmpty(state?.User?.Identity?.Name) && _eveAPIServices!=null && _eveAPIServices.LocationServices!=null && _eveMapperEntity!=null) - { - EveLocation? el = await _eveAPIServices.LocationServices.GetLocation(); - Ship? ship = await _eveAPIServices.LocationServices.GetCurrentShip(); - - if(ship!=null && (_currentShip == null || _currentShip.ShipItemId != ship.ShipItemId)) - { - _logger.LogInformation("Ship Changed"); - _currentShip = ship; - _currentShiptInfos = await _eveMapperEntity.GetShip(ship.ShipTypeId); - - - if(_currentShip!=null && _currentShiptInfos!=null) - ShipChanged?.Invoke(_currentShip,_currentShiptInfos); - } - - if (el != null && (_currentLocation == null || _currentLocation.SolarSystemId != el.SolarSystemId) ) - { - _logger.LogInformation("System Changed"); - _currentLocation = el; - _currentSolarSystem = await _eveMapperEntity.GetSystem(el.SolarSystemId); - - if(_currentSolarSystem!=null) - SystemChanged?.Invoke(_currentSolarSystem); - } - } + if (string.IsNullOrEmpty(state?.User?.Identity?.Name) || _eveAPIServices?.LocationServices == null || _eveMapperEntity == null) return; + + await UpdateCurrentShip(); + await UpdateCurrentLocation(); } - catch(Exception ex) + catch (Exception ex) { _logger.LogError(ex, "Track error"); } } + + private async Task UpdateCurrentShip() + { + var ship = await _eveAPIServices.LocationServices.GetCurrentShip(); + if (ship == null || _currentShip?.ShipItemId == ship.ShipItemId) return; + + _logger.LogInformation("Ship Changed"); + _currentShip = ship; + _currentShiptInfos = await _eveMapperEntity.GetShip(ship.ShipTypeId); + + if (_currentShiptInfos != null) + ShipChanged?.Invoke(_currentShip, _currentShiptInfos); + } + + private async Task UpdateCurrentLocation() + { + var el = await _eveAPIServices.LocationServices.GetLocation(); + if (el == null || _currentLocation?.SolarSystemId == el.SolarSystemId) return; + + _logger.LogInformation("System Changed"); + _currentLocation = el; + _currentSolarSystem = await _eveMapperEntity.GetSystem(el.SolarSystemId); + + if (_currentSolarSystem != null) + SystemChanged?.Invoke(_currentSolarSystem); + } } diff --git a/src/WHMapper/Services/EveMapper/IEveMapperHelper.cs b/src/WHMapper/Services/EveMapper/IEveMapperHelper.cs index 982debf9..eb9d2b97 100644 --- a/src/WHMapper/Services/EveMapper/IEveMapperHelper.cs +++ b/src/WHMapper/Services/EveMapper/IEveMapperHelper.cs @@ -13,7 +13,7 @@ public interface IEveMapperHelper { ReadOnlyCollection WormholeTypes { get; } Task DefineEveSystemNodeModel(WHSystem wh); - bool IsWorhmole(string systemName); + bool IsWormhole(string systemName); Task GetWHClass(SystemEntity whSystem); Task GetWHClass(string regionName, string constellationName, string systemName,float securityStatus); Task IsRouteViaWH(SystemEntity src, SystemEntity dst); diff --git a/src/WHMapper/Services/SDE/SDEServiceManager.cs b/src/WHMapper/Services/SDE/SDEServiceManager.cs index 4998bbd9..87c90015 100644 --- a/src/WHMapper/Services/SDE/SDEServiceManager.cs +++ b/src/WHMapper/Services/SDE/SDEServiceManager.cs @@ -201,89 +201,100 @@ public async Task ClearCache() /// /// Imports the local SDE files into the cache. /// - public async Task BuildCache() + public async Task BuildCache() { try { - if (!IsExtractionSuccesful()) + if (!this.IsExtractionSuccesful()) { _logger.LogError("Impossible to import SDE, bad SDE extract."); return false; } - var searchPaths = new[] { - Path.GetFullPath(SDE_WORMHOLE_TARGET_DIRECTORY), - Path.GetFullPath(SDE_EVE_TARGET_DIRECTORY) - }; - - var collectionOfFiles = new List(); - foreach (var path in searchPaths) - { - var result = _fileSystem.Directory.GetFiles(path, "solarsystem.yaml", SearchOption.AllDirectories); - if (result.Length != 0) - { - collectionOfFiles.AddRange(result); - } - } - + var collectionOfFiles = await FindSDEFilesAsync(); if (collectionOfFiles.Count == 0) { _logger.LogError("Impossible to rebuild solar system cache, no files were found: probably a bad SDE extract."); return false; } - var collectionOfSolarSystems = new BlockingCollection(); - Parallel.ForEach(collectionOfFiles, (file) => - { - var deserializer = new DeserializerBuilder() - .WithNamingConvention(CamelCaseNamingConvention.Instance) - .IgnoreUnmatchedProperties() - .Build(); + var collectionOfSolarSystems = await DeserializeSolarSystemsAsync(collectionOfFiles); + var collectionOfJumps = BuildSolarSystemJumps(collectionOfSolarSystems); - using (var text_reader = File.OpenText(file)) - { - var solarSystem = deserializer.Deserialize(text_reader); - var systemName = Path.GetFileName(Path.GetDirectoryName(file)); - solarSystem.Name = (string.IsNullOrEmpty(systemName)) ? "Unknown" : systemName; + await UpdateCacheAsync(collectionOfSolarSystems, collectionOfJumps); - collectionOfSolarSystems.Add(solarSystem); - } - }); + return true; + } + catch (Exception ex) + { + _logger.LogError(ex, "Failed to import SolarSystemJumpList and SolarSystemList"); + return false; + } + } - var collectionOfJumps = new List(); - //after all sde system loading build SolarSystemJumps - foreach (var system in collectionOfSolarSystems) - { - var JumpSystemList = new List(); + private async Task> FindSDEFilesAsync() + { + var searchPaths = new[] { + Path.GetFullPath(SDE_WORMHOLE_TARGET_DIRECTORY), + Path.GetFullPath(SDE_EVE_TARGET_DIRECTORY) + }; - if (system.Stargates != null || !system.Stargates!.IsEmpty) - { - foreach (var stargate in system.Stargates.Values) - { - var s = collectionOfSolarSystems.FirstOrDefault(x => x.Stargates.ContainsKey(stargate.Destination)); - if (s != null) - { - JumpSystemList.Add(new SolarSystem(s.SolarSystemID, s.Security)); - } - } - } + var collectionOfFiles = new List(); + foreach (var path in searchPaths) + { + var result = _fileSystem.Directory.GetFiles(path, "solarsystem.yaml", SearchOption.AllDirectories); + collectionOfFiles.AddRange(result); + } - var result = new SolarSystemJump(system.SolarSystemID, system.Security, JumpSystemList); - collectionOfJumps.Add(result); - }; + return collectionOfFiles; + } - //clean old cache and add new one - await ClearCache(); - await _cacheService.Set(SDEConstants.REDIS_SDE_SOLAR_SYSTEMS_KEY, collectionOfSolarSystems); - await _cacheService.Set(SDEConstants.REDIS_SOLAR_SYSTEM_JUMPS_KEY, collectionOfJumps); + private async Task> DeserializeSolarSystemsAsync(List collectionOfFiles) + { + var collectionOfSolarSystems = new BlockingCollection(); + Parallel.ForEach(collectionOfFiles, (file) => + { + var deserializer = new DeserializerBuilder() + .WithNamingConvention(CamelCaseNamingConvention.Instance) + .IgnoreUnmatchedProperties() + .Build(); - return true; - } - catch (Exception ex) + using (var textReader = File.OpenText(file)) + { + var solarSystem = deserializer.Deserialize(textReader); + var systemName = Path.GetFileName(Path.GetDirectoryName(file)); + solarSystem.Name = string.IsNullOrEmpty(systemName) ? "Unknown" : systemName; + + collectionOfSolarSystems.Add(solarSystem); + } + }); + + return collectionOfSolarSystems; + } + + private List BuildSolarSystemJumps(BlockingCollection collectionOfSolarSystems) + { + var collectionOfJumps = new List(); + foreach (var system in collectionOfSolarSystems) { - _logger.LogError(ex, "Imported SolarSystemJumpList and SolarSystemList"); - return false; + var jumpSystemList = system.Stargates?.Values + .Select(stargate => collectionOfSolarSystems.FirstOrDefault(x => x.Stargates.ContainsKey(stargate.Destination))) + .Where(s => s != null) + .Select(s => new SolarSystem(s.SolarSystemID, s.Security)) + .ToList() ?? new List(); + + var result = new SolarSystemJump(system.SolarSystemID, system.Security, jumpSystemList); + collectionOfJumps.Add(result); } + + return collectionOfJumps; + } + + private async Task UpdateCacheAsync(BlockingCollection collectionOfSolarSystems, List collectionOfJumps) + { + await ClearCache(); + await _cacheService.Set(SDEConstants.REDIS_SDE_SOLAR_SYSTEMS_KEY, collectionOfSolarSystems); + await _cacheService.Set(SDEConstants.REDIS_SOLAR_SYSTEM_JUMPS_KEY, collectionOfJumps); } } } \ No newline at end of file diff --git a/src/WHMapper/Services/WHColor/IWHColorHelper.cs b/src/WHMapper/Services/WHColor/IWHColorHelper.cs index 5cb053ee..07a8de41 100644 --- a/src/WHMapper/Services/WHColor/IWHColorHelper.cs +++ b/src/WHMapper/Services/WHColor/IWHColorHelper.cs @@ -17,7 +17,7 @@ public interface IWHColorHelper string GetLinkStatusColor(SystemLinkMassStatus status); string GetLinkSelectedColor(); - string GetNodeStatusColor(WHSystemStatusEnum status); + string GetNodeStatusColor(WHSystemStatus status); } } diff --git a/src/WHMapper/Services/WHColor/WHColorHelper.cs b/src/WHMapper/Services/WHColor/WHColorHelper.cs index 0972d3f6..43e6bba1 100644 --- a/src/WHMapper/Services/WHColor/WHColorHelper.cs +++ b/src/WHMapper/Services/WHColor/WHColorHelper.cs @@ -81,17 +81,17 @@ private bool FloatEquals(float a, float b) } - public string GetNodeStatusColor(WHSystemStatusEnum status) + public string GetNodeStatusColor(WHSystemStatus status) { switch (status) { - case WHSystemStatusEnum.Unknown: + case WHSystemStatus.Unknown: return NODE_STATUS_UNKNOWN_COLOR; - case WHSystemStatusEnum.Friendly: + case WHSystemStatus.Friendly: return NODE_STATUS_FRIENDLY_COLOR; - case WHSystemStatusEnum.Occupied: + case WHSystemStatus.Occupied: return NODE_STATUS_OCCUPIED_COLOR; - case WHSystemStatusEnum.Hostile: + case WHSystemStatus.Hostile: return NODE_STATUS_HOSTILE_COLOR; default: return IWHColorHelper.DEFAULT_COLOR; diff --git a/src/WHMapper/Services/WHSignatures/WHSignatureHelper.cs b/src/WHMapper/Services/WHSignatures/WHSignatureHelper.cs index 0a97b9ee..874ed7e0 100644 --- a/src/WHMapper/Services/WHSignatures/WHSignatureHelper.cs +++ b/src/WHMapper/Services/WHSignatures/WHSignatureHelper.cs @@ -1,15 +1,9 @@ using System; using System.Text.RegularExpressions; using WHMapper.Models.Db.Enums; -using WHMapper.Models.Db; using WHMapper.Services.WHSignature; -using WHMapper.Models.Custom; -using System.Security.Cryptography; -using MudBlazor; using Microsoft.AspNetCore.Components; using WHMapper.Repositories.WHSignatures; -using WHMapper.Repositories.WHSystems; -using System.Linq; namespace WHMapper.Services.WHSignatures { @@ -101,101 +95,76 @@ public Task ValidateScanResult(string? scanResult) } - public async Task ImportScanResult(string scanUser,int currentSystemScannedId,string? scanResult,bool lazyDeleted) + public async Task ImportScanResult(string scanUser, int currentSystemScannedId, string? scanResult, bool lazyDeleted) { - - bool sigUpdated = false; - bool sigAdded = false; - if (!await ValidateScanResult(scanResult)) throw new Exception("Bad signatures format"); + var sigs = await ParseScanResult(scanUser, currentSystemScannedId, scanResult); + if (sigs == null || !sigs.Any()) + throw new Exception("Bad signature parsing parameters"); - var sigs = await ParseScanResult(scanUser, currentSystemScannedId,scanResult); + if (currentSystemScannedId <= 0) + throw new Exception("Current System is nullable"); - if (sigs != null && sigs.Count() > 0) - { + var currentSystemSigs = await _dbWHSignatures.GetByWHId(currentSystemScannedId); + if (currentSystemSigs == null) return false; - if (currentSystemScannedId >0) - { - var currentSystemSigs = await _dbWHSignatures.GetByWHId(currentSystemScannedId); - if (currentSystemSigs == null) - return false;//to do lod + bool sigUpdated = false, sigAdded = false; - if (lazyDeleted) - { - var sigsToDeleted = currentSystemSigs.ExceptBy(sigs.Select(x => x.Name), y => y.Name); - if (sigsToDeleted != null && sigsToDeleted.Count() > 0) - { - foreach (var sig in sigsToDeleted) - { - await _dbWHSignatures.DeleteById(sig.Id); - } - - currentSystemSigs = await _dbWHSignatures.GetByWHId(currentSystemScannedId); - if (currentSystemSigs == null) - return false; - } + if (lazyDeleted) + { + await DeleteSignatures(currentSystemSigs, sigs); + currentSystemSigs = await _dbWHSignatures.GetByWHId(currentSystemScannedId); + if (currentSystemSigs == null) return false; + } - } - var sigsToUpdate = currentSystemSigs.IntersectBy(sigs.Select(x => x.Name), y => y.Name); - if (sigsToUpdate != null && sigsToUpdate.Count() > 0) - { - foreach (var sig in sigsToUpdate) - { - var sigParse = sigs.Where(x => x.Name == sig.Name).FirstOrDefault(); - if (sigParse != null) - { - if (sigParse.Group != WHSignatureGroup.Unknow) - { - - sig.Group = sigParse.Group; - if (String.IsNullOrEmpty(sig.Type)) - sig.Type = sigParse.Type; - - } - - sig.Updated = sigParse.Updated; - sig.UpdatedBy = sigParse.UpdatedBy; - } - else - { - //todo add log - } - } - - var resUpdate = await _dbWHSignatures.Update(sigsToUpdate); - - if (resUpdate != null && resUpdate.Count() == sigsToUpdate.Count()) - sigUpdated = true; - else - sigUpdated = false; - } + sigUpdated = await UpdateSignatures(currentSystemSigs, sigs); + sigAdded = await AddNewSignatures(currentSystemSigs, sigs, currentSystemScannedId); + await Task.Delay(500); // Consider removing or justifying this delay. + return sigUpdated || sigAdded; + } - var sigsToAdd = sigs.ExceptBy(currentSystemSigs.Select(x => x.Name), y => y.Name); - if (sigsToAdd != null && sigsToAdd.Count() > 0) - { - //var resAdd = await _dbWHSystem.AddWHSignatures(currentSystemScannedId, sigsToAdd); + private async Task UpdateSignatures(IEnumerable currentSystemSigs, IEnumerable sigs) + { + var sigsToUpdate = currentSystemSigs.IntersectBy(sigs.Select(x => x.Name), y => y.Name); + if (!sigsToUpdate.Any()) return false; - var resAdd = await _dbWHSignatures.Create(sigsToAdd); - if (resAdd != null && resAdd.Count() == sigsToAdd.Count()) - sigAdded = true; - else - sigAdded = false; - } - await Task.Delay(500); - return (sigUpdated || sigAdded); + foreach (var sig in sigsToUpdate) + { + var sigParse = sigs.FirstOrDefault(x => x.Name == sig.Name); + if (sigParse != null && sigParse.Group != WHSignatureGroup.Unknow) + { + sig.Group = sigParse.Group; + sig.Type = String.IsNullOrEmpty(sig.Type) ? sigParse.Type : sig.Type; + sig.Updated = sigParse.Updated; + sig.UpdatedBy = sigParse.UpdatedBy; } - else - throw new Exception("Current System is nullable"); } - else - throw new Exception("Bad signature parsing parameters"); + + var resUpdate = await _dbWHSignatures.Update(sigsToUpdate); + return resUpdate != null && resUpdate.Count() == sigsToUpdate.Count(); } + private async Task AddNewSignatures(IEnumerable currentSystemSigs, IEnumerable sigs, int currentSystemScannedId) + { + var sigsToAdd = sigs.ExceptBy(currentSystemSigs.Select(x => x.Name), y => y.Name); + if (!sigsToAdd.Any()) return false; - } + var resAdd = await _dbWHSignatures.Create(sigsToAdd); + return resAdd != null && resAdd.Count() == sigsToAdd.Count(); + } -} + private async Task DeleteSignatures(IEnumerable currentSystemSigs, IEnumerable sigs) + { + var sigsToDeleted = currentSystemSigs.ExceptBy(sigs.Select(x => x.Name), y => y.Name); + foreach (var sig in sigsToDeleted) + { + await _dbWHSignatures.DeleteById(sig.Id); + } + } + + } +}