2023-04-14 16:36:03 +08:00
|
|
|
|
using MECF.Framework.Common.CommonData;
|
|
|
|
|
using OpenSEMI.ClientBase;
|
|
|
|
|
using System.Collections.Generic;
|
2023-04-15 13:21:06 +08:00
|
|
|
|
using System.Globalization;
|
|
|
|
|
using System.Threading;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
using System.Windows;
|
|
|
|
|
using MECF.Framework.Common.DataCenter;
|
|
|
|
|
using MECF.Framework.UI.Core.Converters;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System;
|
|
|
|
|
using Aitex.Core.RT.Log;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using System.Diagnostics;
|
|
|
|
|
using System.Windows.Documents;
|
|
|
|
|
using DocumentFormat.OpenXml.Wordprocessing;
|
2023-04-14 16:36:03 +08:00
|
|
|
|
|
|
|
|
|
namespace MECF.Framework.UI.Client.CenterViews.Dialogs
|
|
|
|
|
{
|
|
|
|
|
public class SystemInfoViewModel: DialogViewModel<string>
|
|
|
|
|
{
|
|
|
|
|
#region Variables
|
|
|
|
|
|
2023-04-15 13:21:06 +08:00
|
|
|
|
private const string KEY_ASSE = "System.AssembliesInfo";
|
|
|
|
|
private const string KEY_RN = "System.ReleaseNote";
|
|
|
|
|
|
|
|
|
|
private readonly CancellationTokenSource _cts;
|
|
|
|
|
private readonly MarkdownToHtmlConverter _mdToHtmlConverter;
|
|
|
|
|
|
2023-04-14 16:36:03 +08:00
|
|
|
|
private List<ReferencedAssemblyInfo> _dependencyAssembliesInfo;
|
|
|
|
|
private string _mdReleaseNote;
|
2023-04-15 13:21:06 +08:00
|
|
|
|
private Task _taskLoadData;
|
2023-04-14 16:36:03 +08:00
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Constructors
|
|
|
|
|
|
2023-04-15 13:21:06 +08:00
|
|
|
|
public SystemInfoViewModel()
|
2023-04-14 16:36:03 +08:00
|
|
|
|
{
|
2023-04-15 13:21:06 +08:00
|
|
|
|
_cts = new CancellationTokenSource();
|
|
|
|
|
_mdToHtmlConverter = new MarkdownToHtmlConverter();
|
|
|
|
|
|
|
|
|
|
PollDataAsync();
|
2023-04-14 16:36:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
|
|
2023-04-15 13:21:06 +08:00
|
|
|
|
public string SicUIVersion => $"SicUI Version {Assembly.GetEntryAssembly().GetName().Version}";
|
|
|
|
|
|
|
|
|
|
|
2023-04-14 16:36:03 +08:00
|
|
|
|
public List<ReferencedAssemblyInfo> DependenciesInfo
|
|
|
|
|
{
|
|
|
|
|
get => _dependencyAssembliesInfo;
|
|
|
|
|
private set
|
|
|
|
|
{
|
|
|
|
|
_dependencyAssembliesInfo = value;
|
|
|
|
|
NotifyOfPropertyChange();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string MdReleaseNote
|
|
|
|
|
{
|
|
|
|
|
get => _mdReleaseNote;
|
|
|
|
|
private set
|
|
|
|
|
{
|
|
|
|
|
_mdReleaseNote = value;
|
|
|
|
|
NotifyOfPropertyChange();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
2023-04-15 13:21:06 +08:00
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
|
|
|
|
|
protected override void OnDeactivate(bool close)
|
|
|
|
|
{
|
|
|
|
|
_cts?.Cancel();
|
|
|
|
|
_taskLoadData?.Dispose();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void PollData()
|
|
|
|
|
{
|
|
|
|
|
var dict = QueryDataClient.Instance.Service.PollData(new[] { KEY_ASSE, KEY_RN });
|
|
|
|
|
var list = dict[KEY_ASSE] as List<ReferencedAssemblyInfo>;
|
|
|
|
|
var releaseNote = _mdToHtmlConverter.Convert(dict[KEY_RN], null, null, CultureInfo.CurrentCulture)?.ToString();
|
|
|
|
|
DependenciesInfo = list;
|
|
|
|
|
MdReleaseNote = releaseNote;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void PollDataAsync()
|
|
|
|
|
{
|
|
|
|
|
// Load信息用于提醒用户正在加载
|
|
|
|
|
DependenciesInfo = new List<ReferencedAssemblyInfo>(new[]
|
|
|
|
|
{
|
|
|
|
|
new ReferencedAssemblyInfo()
|
|
|
|
|
{
|
|
|
|
|
Name = "Loading..."
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 异步拉取数据,以便窗口及时弹出
|
|
|
|
|
List<ReferencedAssemblyInfo> list = null;
|
|
|
|
|
var releaseNote = "";
|
|
|
|
|
_taskLoadData = Task.Run(() =>
|
|
|
|
|
{
|
|
|
|
|
var dict = QueryDataClient.Instance.Service.PollData(new[] { KEY_ASSE, KEY_RN });
|
|
|
|
|
list = dict[KEY_ASSE] as List<ReferencedAssemblyInfo>;
|
|
|
|
|
releaseNote = _mdToHtmlConverter.Convert(dict[KEY_RN], null, null, CultureInfo.CurrentCulture)?.ToString();
|
|
|
|
|
}, _cts.Token).ContinueWith(t =>
|
|
|
|
|
{
|
|
|
|
|
if (t.IsCompleted)
|
|
|
|
|
{
|
|
|
|
|
Application.Current?.Dispatcher.Invoke(() =>
|
|
|
|
|
{
|
|
|
|
|
DependenciesInfo = list;
|
|
|
|
|
MdReleaseNote = releaseNote;
|
|
|
|
|
Debug.WriteLine($"{MdReleaseNote.Substring(0, 100)} =- {releaseNote.Substring(0, 100)}");
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}, _cts.Token);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void CopyAssembliesInfo()
|
|
|
|
|
{
|
|
|
|
|
if(DependenciesInfo.Count > 0)
|
|
|
|
|
{
|
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
foreach(var dependency in DependenciesInfo)
|
|
|
|
|
{
|
|
|
|
|
sb.AppendLine(dependency.ToString());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Clipboard.SetText(sb.ToString());
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
LOG.Error($"Unable to copy assemblis info to clipboard, {ex.Message}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endregion
|
2023-04-14 16:36:03 +08:00
|
|
|
|
}
|
|
|
|
|
}
|