From 5a49ee9c23a52438a160f6a2f0c4a8cb91026297 Mon Sep 17 00:00:00 2001 From: Randolf <1665718426@qq.com> Date: Mon, 24 Feb 2025 21:28:30 +0800 Subject: [PATCH] fix: fix the 1st symbol not loaded error --- .../.idea/material_theme_project_new.xml | 12 +++++++++ src/TwincatToolbox/Services/AdsComService.cs | 4 +-- .../ViewModels/DataLogViewModel.cs | 24 ++++++++++-------- .../ViewModels/MainViewModel.cs | 25 +++++++++---------- 4 files changed, 38 insertions(+), 27 deletions(-) create mode 100644 src/.idea/.idea.TwincatToolbox/.idea/material_theme_project_new.xml diff --git a/src/.idea/.idea.TwincatToolbox/.idea/material_theme_project_new.xml b/src/.idea/.idea.TwincatToolbox/.idea/material_theme_project_new.xml new file mode 100644 index 0000000..0e87fc6 --- /dev/null +++ b/src/.idea/.idea.TwincatToolbox/.idea/material_theme_project_new.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/src/TwincatToolbox/Services/AdsComService.cs b/src/TwincatToolbox/Services/AdsComService.cs index f7cb8be..1808b85 100644 --- a/src/TwincatToolbox/Services/AdsComService.cs +++ b/src/TwincatToolbox/Services/AdsComService.cs @@ -110,9 +110,7 @@ List LoadSymbolTreeBFS(ISymbol root) { symbolList.Add(new SymbolInfo(symbol)); } } - - // remove first element, which is the root symbol(virtual symbol) - symbolList.RemoveAt(0); + return symbolList; } diff --git a/src/TwincatToolbox/ViewModels/DataLogViewModel.cs b/src/TwincatToolbox/ViewModels/DataLogViewModel.cs index 66fce23..3972d4f 100644 --- a/src/TwincatToolbox/ViewModels/DataLogViewModel.cs +++ b/src/TwincatToolbox/ViewModels/DataLogViewModel.cs @@ -51,7 +51,8 @@ public List SearchResultSymbols } } - private void UpdateSearchResultSymbols() { + private void UpdateSearchResultSymbols() + { _searchResultSymbols = SearchSymbols(AvailableSymbols); SearchResultSelectedSymbols.CollectionChanged -= OnSearchResultSelectedSymbolsChanged; @@ -75,8 +76,7 @@ private void UpdateSearchResultSymbols() { public ISukiDialogManager DialogManager { get; } = DialogManageService.DialogManager; - public DataLogViewModel(IAdsComService adsComService, - ILogDataService logDataService, ILogPlotService logPlotService) + public DataLogViewModel(IAdsComService adsComService, ILogDataService logDataService, ILogPlotService logPlotService) : base("DataLog", MaterialIconKind.Blog, index: -1) { _adsComService = adsComService; @@ -96,15 +96,15 @@ private void OnSearchResultSelectedSymbolsChanged(object? sender, NotifyCollecti [RelayCommand] private void OnGetAvailableSymbols() { - if (_adsComService.GetAdsState() == TwinCAT.Ads.AdsState.Invalid) + if (_adsComService.GetAdsState() == AdsState.Invalid) { Debug.WriteLine("Ads server is not connected."); return; } - + AvailableSymbols = _adsComService.GetAvailableSymbols(); - AvailableSymbols.Sort((a, b) => a.Name.CompareTo(b.Name)); - Debug.WriteLine("Available symbols: {0}", AvailableSymbols.Count()); + AvailableSymbols.Sort((a, b) => string.Compare(a.Name, b.Name, StringComparison.Ordinal)); + Debug.WriteLine("Available symbols: {0}", AvailableSymbols.Count); if (_isFirstGetAvailableSymbols) { @@ -137,14 +137,15 @@ public List SearchSymbols(IList sourceList) { if (string.IsNullOrEmpty((SearchText))) return sourceList.ToList(); var searchResults = sourceList - .OrderByDescending(s=>GetSimilarityScore(SearchText, s)) + .OrderByDescending(s => GetSimilarityScore(SearchText, s)) .ToList(); // Debug.WriteLine("Search results: {0}", searchResults.Count()); - + return searchResults; } - public int GetSimilarityScore(string searchText, SymbolInfo symbolInfo) { + public int GetSimilarityScore(string searchText, SymbolInfo symbolInfo) + { return Fuzz.PartialTokenSetRatio(searchText, symbolInfo.Name.ToLower()); } @@ -240,7 +241,8 @@ private async Task StopLogAsync() } // todo: fix extract type error, such as REAL(length = 4) => BinaryPrimitives.ReadHalfLittleEndian(e.Data.Span); - private async void AdsNotificationHandler(object? sender, AdsNotificationEventArgs e) { + private async void AdsNotificationHandler(object? sender, AdsNotificationEventArgs e) + { if (!_symbolsDict.TryGetValue(e.Handle, out var symbol)) { Debug.WriteLine("Symbol not found for handle: {0}", e.Handle); diff --git a/src/TwincatToolbox/ViewModels/MainViewModel.cs b/src/TwincatToolbox/ViewModels/MainViewModel.cs index a5f21eb..f5e8616 100644 --- a/src/TwincatToolbox/ViewModels/MainViewModel.cs +++ b/src/TwincatToolbox/ViewModels/MainViewModel.cs @@ -1,9 +1,8 @@ using System.Collections.Generic; using System.Diagnostics; -using System.IO.Pipes; using System.Linq; using System.Threading.Tasks; - +using Avalonia; using Avalonia.Collections; using Avalonia.Controls.ApplicationLifetimes; @@ -11,9 +10,6 @@ using CommunityToolkit.Mvvm.Input; using SukiUI.Dialogs; - -using TwinCAT.Ads; - using TwincatToolbox.Models; using TwincatToolbox.Services; using TwincatToolbox.Services.IService; @@ -25,11 +21,11 @@ public partial class MainViewModel : ObservableObject public IAvaloniaReadOnlyList NavViews { get; } [ObservableProperty] private ViewModelBase? _activeView; - [ObservableProperty] private string _netId = string.Empty; - [ObservableProperty] private string _portId = string.Empty; + [ObservableProperty] private string _netId; + [ObservableProperty] private string _portId; - private AdsConfig _adsConfig; - private IAdsComService _adsComService; + private readonly AdsConfig _adsConfig; + private readonly IAdsComService _adsComService; [ObservableProperty] private string _adsStateText = string.Empty; public ISukiDialogManager DialogManager { get; } = DialogManageService.DialogManager; @@ -76,16 +72,19 @@ private async Task ScanAndSelectAdsRouteAsync() { { DataContext = new ScanAdsRouteViewModel() }; - if (App.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) + if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { - var dialogResult = await dialog.ShowDialog(desktop?.MainWindow); - if (dialogResult != null) NetId = dialogResult; + if (desktop.MainWindow != null) + { + var dialogResult = await dialog.ShowDialog(desktop.MainWindow); + NetId = dialogResult; + } Debug.WriteLine($"Selected NetId: {NetId}"); } } [RelayCommand] - private void OpenConfigFolder() { + private static void OpenConfigFolder() { Process.Start(new ProcessStartInfo { FileName = AppConfig.FolderName,