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,