2023-07-09 00:48:08 +08:00
|
|
|
using Godot;
|
|
|
|
using System;
|
2023-07-10 00:00:20 +08:00
|
|
|
using System.Globalization;
|
2023-07-09 00:48:08 +08:00
|
|
|
using System.Linq;
|
2023-07-19 14:16:22 +08:00
|
|
|
using System.Text;
|
2023-07-09 00:48:08 +08:00
|
|
|
using System.Threading.Tasks;
|
|
|
|
using BITKit;
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
namespace BITFactory;
|
|
|
|
public partial class IDIS_SearchService : Node
|
|
|
|
{
|
|
|
|
[ExportCategory("Service")]
|
|
|
|
[Export] private IDIS_Service service;
|
|
|
|
|
|
|
|
[ExportCategory("UI 绑定 ")]
|
|
|
|
[Export] private LineEdit searchEdit;
|
|
|
|
[Export] private Control searchCandidateContainer;
|
|
|
|
[Export] private StringResource searchButtonVariation;
|
2023-07-10 00:00:20 +08:00
|
|
|
[Export] private Control searchEditPadding;
|
2023-07-18 20:57:02 +08:00
|
|
|
[Export] private Button searchButton;
|
|
|
|
[Export] private Button copyHandleButton;
|
2023-07-10 00:00:20 +08:00
|
|
|
|
|
|
|
[ExportCategory("Query 绑定")]
|
|
|
|
[Export] private Label handleLabel;
|
|
|
|
[Export] private Label nameLabel;
|
|
|
|
[Export] private Label createTimeLabel;
|
|
|
|
[Export] private Label updateTimeLabel;
|
|
|
|
[Export] private Control valueContainer;
|
|
|
|
[Export] private Control referenceContainer;
|
|
|
|
|
|
|
|
[ExportCategory("Template")]
|
|
|
|
[Export] private PackedScene valueTemplate;
|
|
|
|
[Export] private PackedScene referenceTemplate;
|
|
|
|
[Export] private PackedScene categoryTemplate;
|
2023-07-09 00:48:08 +08:00
|
|
|
|
2023-07-18 20:57:02 +08:00
|
|
|
private string currentHandle;
|
|
|
|
|
2023-07-09 00:48:08 +08:00
|
|
|
public override void _Ready()
|
|
|
|
{
|
2023-07-11 00:14:36 +08:00
|
|
|
MathNode.ClearChild(searchCandidateContainer);
|
|
|
|
MathNode.ClearChild(valueContainer);
|
2023-07-09 00:48:08 +08:00
|
|
|
|
|
|
|
searchEdit.TextChanged += Search;
|
|
|
|
//searchEdit.FocusExited += Clear;
|
2023-07-18 20:57:02 +08:00
|
|
|
searchButton.Pressed+=Search;
|
|
|
|
copyHandleButton.Pressed += CopyCurrentHandle;
|
2023-07-09 00:48:08 +08:00
|
|
|
}
|
2023-07-11 00:14:36 +08:00
|
|
|
|
|
|
|
private void Search()
|
|
|
|
{
|
|
|
|
Search(searchEdit.Text);
|
|
|
|
}
|
2023-07-09 00:48:08 +08:00
|
|
|
private void Search(string word)
|
|
|
|
{
|
2023-07-19 14:16:22 +08:00
|
|
|
var split = word.Split('?');
|
|
|
|
var condition = string.Empty;
|
|
|
|
switch (split)
|
|
|
|
{
|
|
|
|
case var x when x.Length is 1:
|
|
|
|
break;
|
|
|
|
case var x when x.Length is 2:
|
|
|
|
condition = split[1];
|
|
|
|
break;
|
|
|
|
case var x when x.Length > 2:
|
|
|
|
split = word.Split('?', 2);
|
|
|
|
condition = split[1];
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
var rawHandle = split[0];
|
|
|
|
|
|
|
|
|
2023-07-11 00:14:36 +08:00
|
|
|
MathNode.ClearChild(searchCandidateContainer);
|
2023-07-10 00:00:20 +08:00
|
|
|
if (service.Query(word, out IDIS_Query[] queries) is false) return;
|
2023-07-19 01:15:17 +08:00
|
|
|
if (queries.Length is 1 && queries.First().Handle == rawHandle)
|
2023-07-18 20:57:02 +08:00
|
|
|
{
|
|
|
|
QueryIDIS(queries.First());
|
|
|
|
return;
|
|
|
|
}
|
2023-07-18 16:42:33 +08:00
|
|
|
foreach (var query in queries.Take(3))
|
2023-07-09 00:48:08 +08:00
|
|
|
{
|
|
|
|
var button = new Button();
|
|
|
|
|
|
|
|
button.Flat = true;
|
|
|
|
|
|
|
|
searchCandidateContainer.AddChild(button);
|
|
|
|
|
2023-07-18 20:57:02 +08:00
|
|
|
button.Text = $"{query.Handle}:{query.CreateUser}";
|
2023-07-09 00:48:08 +08:00
|
|
|
|
|
|
|
button.Pressed+=OnButtonOnPressed;
|
|
|
|
|
|
|
|
button.ThemeTypeVariation = searchButtonVariation.Value;
|
|
|
|
|
|
|
|
void OnButtonOnPressed()
|
|
|
|
{
|
2023-07-19 14:16:22 +08:00
|
|
|
searchEdit.Text =string.IsNullOrEmpty(condition) ? query.Handle :query.Handle + condition ;
|
2023-07-09 00:48:08 +08:00
|
|
|
Search(query.Handle);
|
2023-07-10 00:00:20 +08:00
|
|
|
QueryIDIS(query);
|
2023-07-09 00:48:08 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
private async void Clear()
|
|
|
|
{
|
|
|
|
await Task.Delay(100);
|
2023-07-11 00:14:36 +08:00
|
|
|
MathNode.ClearChild(searchCandidateContainer);
|
2023-07-09 00:48:08 +08:00
|
|
|
}
|
2023-07-10 00:00:20 +08:00
|
|
|
private void QueryIDIS(IDIS_Query query)
|
|
|
|
{
|
|
|
|
searchEditPadding.Hide();
|
|
|
|
|
|
|
|
handleLabel.Text = query.Handle;
|
2023-07-18 20:57:02 +08:00
|
|
|
|
|
|
|
currentHandle = query.Handle;
|
2023-07-10 00:00:20 +08:00
|
|
|
|
2023-07-18 20:57:02 +08:00
|
|
|
createTimeLabel.Text = query.CreateTime.ToString("yyyy-MM-dd HH:mm:ss",CultureInfo.InvariantCulture);
|
|
|
|
updateTimeLabel.Text = query.UpdateTime.ToString("yyyy-MM-dd HH:mm:ss",CultureInfo.InvariantCulture);
|
2023-07-10 00:00:20 +08:00
|
|
|
|
2023-07-11 00:14:36 +08:00
|
|
|
MathNode.ClearChild(valueContainer);
|
|
|
|
MathNode.ClearChild(referenceContainer);
|
2023-07-10 00:00:20 +08:00
|
|
|
|
|
|
|
foreach (var categoryGroup in query.Datas.GroupBy(x=>x.Category))
|
|
|
|
{
|
|
|
|
var categoryContainer = categoryTemplate.Instantiate<UXContainer>();
|
|
|
|
categoryContainer.Text = categoryGroup.First().Category;
|
|
|
|
foreach (var x in categoryGroup)
|
|
|
|
{
|
|
|
|
var container = valueTemplate.Instantiate<UXContainer>();
|
|
|
|
|
2023-07-17 04:10:14 +08:00
|
|
|
container.labels[0].Text = x.Name;
|
2023-07-10 00:00:20 +08:00
|
|
|
container.labels[1].Text = x.Value;
|
|
|
|
container.labels[2].Text = x.UpdateTime.ToString(CultureInfo.InvariantCulture);
|
|
|
|
container.labels[3].Text = x.CreateTime.ToString(CultureInfo.InvariantCulture);
|
|
|
|
|
|
|
|
categoryContainer.contextContainer.AddChild(container);
|
|
|
|
}
|
|
|
|
valueContainer.AddChild(categoryContainer);
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach (var x in query.References)
|
|
|
|
{
|
|
|
|
var container = referenceTemplate.Instantiate<UXContainer>();
|
|
|
|
|
|
|
|
container.Text = x.RelatedHandle;
|
|
|
|
|
|
|
|
container.button.Pressed += () =>
|
|
|
|
{
|
|
|
|
service.Query(x.RelatedHandle,out IDIS_Query _query);
|
|
|
|
QueryIDIS(_query);
|
|
|
|
};
|
|
|
|
|
|
|
|
referenceContainer.AddChild(container);
|
|
|
|
}
|
|
|
|
}
|
2023-07-18 20:57:02 +08:00
|
|
|
|
|
|
|
private void CopyCurrentHandle()
|
|
|
|
{
|
|
|
|
DisplayServer.ClipboardSet(currentHandle);
|
|
|
|
}
|
2023-07-09 00:48:08 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|