246 lines
5.2 KiB
C#
246 lines
5.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using Godot;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Learn;
|
|
using Learn.Component;
|
|
using Learn.Config;
|
|
using Learn.Models;
|
|
using Learn.Parsers;
|
|
using Learn.Utils;
|
|
|
|
public partial class Main : Node
|
|
{
|
|
[ExportGroup("文件夹操作")]
|
|
[Export] private FileDirSelector _dirSelector;
|
|
|
|
[ExportGroup("操作面板")]
|
|
[Export] private Button _openDirButton;
|
|
[Export] private Button _doParseButton;
|
|
[Export] private Button _doTMDBParseButton;
|
|
[Export] private Button _doMoveButton;
|
|
[Export] private Button _saveButton;
|
|
[Export] private Button _resetButton;
|
|
[Export] private Button _loadButton;
|
|
[Export] private Button _reloadConfigButton;
|
|
|
|
[ExportGroup("编辑面板")]
|
|
[Export] private NodeInfoEditPanel _nodeInfoEditPanel;
|
|
[Export] private Button _addKeyButton;
|
|
[Export] private Button _removeKeyButton;
|
|
|
|
[ExportGroup("解析面板")]
|
|
[Export] private InspectorPanel _inspectorPanel;
|
|
|
|
[ExportGroup("主展示面板")]
|
|
[Export] private MainTreePanel _mainTreePanel;
|
|
[Export] private LineEdit _columnIndexText;
|
|
[Export] private LineEdit _columnWidthText;
|
|
[Export] private LineEdit _columnText;
|
|
[Export] private Button _addColumnButton;
|
|
[Export] private Button _removeColumnButton;
|
|
[Export] private Button _clearColumnButton;
|
|
[Export] private Button _expandAllButton;
|
|
[Export] private Button _foldAllButton;
|
|
|
|
private bool _refreshPanels;
|
|
|
|
private Configs _configs;
|
|
|
|
public override void _Ready()
|
|
{
|
|
_nodeInfoEditPanel.OnNodeInfoEdited += _mainTreePanel.UpdateColumns;
|
|
_addKeyButton.Pressed += _nodeInfoEditPanel.AddKeyValue;
|
|
_removeKeyButton.Pressed += _nodeInfoEditPanel.RemoveKeyValue;
|
|
|
|
_mainTreePanel.MultiSelected += (_, _, _) => { _refreshPanels = true; };
|
|
_addColumnButton.Pressed += () =>
|
|
{
|
|
_mainTreePanel.AddColumn(_columnText.Text,
|
|
int.TryParse(_columnIndexText.Text, out var index) ? index : -1,
|
|
int.TryParse(_columnWidthText.Text, out var width) ? width : -1);
|
|
DoSave();
|
|
};
|
|
_removeColumnButton.Pressed += () =>
|
|
{
|
|
_mainTreePanel.RemoveColumn(_columnText.Text);
|
|
DoSave();
|
|
};
|
|
_clearColumnButton.Pressed += () =>
|
|
{
|
|
_mainTreePanel.ClearColumns();
|
|
DoSave();
|
|
};
|
|
|
|
_expandAllButton.Pressed += ExpandAll;
|
|
_foldAllButton.Pressed += FoldAll;
|
|
|
|
// 功能区
|
|
_openDirButton.Pressed += ScanDir;
|
|
_doParseButton.Pressed += DoParse;
|
|
_doTMDBParseButton.Pressed += DoTMDBParse;
|
|
_saveButton.Pressed += DoSave;
|
|
_doMoveButton.Pressed += DoMove;
|
|
_resetButton.Pressed += DoReset;
|
|
_loadButton.Pressed += LoadData;
|
|
_reloadConfigButton.Pressed += ReloadConfig;
|
|
_doParseButton.Text = "开始解析";
|
|
|
|
_configs = new Configs();
|
|
_configs.ConfigPath = "config.json";
|
|
_configs.Load(true);
|
|
|
|
LoadData();
|
|
ScanDir();
|
|
FoldAll();
|
|
_refreshPanels = true;
|
|
}
|
|
|
|
private void ReloadConfig()
|
|
{
|
|
_configs.Load(true);
|
|
}
|
|
|
|
private void LoadData()
|
|
{
|
|
if (File.Exists(DataPath))
|
|
{
|
|
_mainTreePanel.LoadData(DataPath);
|
|
GD.Print("加载成功:" + DataPath);
|
|
_refreshPanels = true;
|
|
}
|
|
}
|
|
|
|
private void ExpandAll()
|
|
{
|
|
SetAllCollapsed(false);
|
|
}
|
|
|
|
private void FoldAll()
|
|
{
|
|
SetAllCollapsed(true);
|
|
}
|
|
|
|
private void SetAllCollapsed(bool collapsed)
|
|
{
|
|
var root = _mainTreePanel.GetRoot();
|
|
if (root == null) return;
|
|
foreach (var child in root.GetChildren())
|
|
{
|
|
child.SetCollapsedRecursive(collapsed);
|
|
}
|
|
}
|
|
|
|
public override void _Process(double delta)
|
|
{
|
|
if (_refreshPanels)
|
|
{
|
|
_refreshPanels = false;
|
|
_nodeInfoEditPanel.SetNodes(_mainTreePanel.SelectingNodes);
|
|
_inspectorPanel.SetNode(_mainTreePanel.SelectingNodes.FirstOrDefault());
|
|
}
|
|
}
|
|
|
|
#region Commands
|
|
|
|
|
|
private async void ScanDir()
|
|
{
|
|
// var path = await _dirSelector.SelectFolderAsync();
|
|
var path = _configs.Get<AppConfig>().ScanPath;
|
|
if (string.IsNullOrEmpty(path))
|
|
{
|
|
return;
|
|
}
|
|
_mainTreePanel.Scan(path);
|
|
FoldAll();
|
|
_refreshPanels = true;
|
|
}
|
|
|
|
private async void DoTMDBParse()
|
|
{
|
|
var root = _mainTreePanel.GetRoot();
|
|
if (root == null) return;
|
|
|
|
_doTMDBParseButton.Disabled = true;
|
|
|
|
ItemParser parser = new TMDBParser(_configs);
|
|
|
|
|
|
foreach (var node in _mainTreePanel.SelectingNodes)
|
|
{
|
|
try
|
|
{
|
|
await parser.Parse(node);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
GD.Print(ex);
|
|
}
|
|
}
|
|
|
|
_doTMDBParseButton.Disabled = false;
|
|
_mainTreePanel.UpdateColumns();
|
|
GD.Print("[TMDBParse] Done");
|
|
}
|
|
|
|
private async void DoParse()
|
|
{
|
|
var root = _mainTreePanel.GetRoot();
|
|
if (root == null) return;
|
|
|
|
_doParseButton.Disabled = true;
|
|
|
|
ItemParser parser = new RawParser(_configs);
|
|
|
|
if (_mainTreePanel.Query(root, out var node))
|
|
{
|
|
try
|
|
{
|
|
await parser.Parse(node);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
GD.Print(ex);
|
|
}
|
|
}
|
|
|
|
_doParseButton.Disabled = false;
|
|
|
|
_mainTreePanel.UpdateColumns();
|
|
GD.Print("[RawParse] Done");
|
|
}
|
|
|
|
private const string DataPath = "data.json";
|
|
|
|
private void DoMove()
|
|
{
|
|
var mover = new FileMover("");
|
|
|
|
foreach (var node in _mainTreePanel.SelectingNodes)
|
|
{
|
|
mover.DoMove(node);
|
|
}
|
|
|
|
ScanDir();
|
|
}
|
|
|
|
private void DoSave()
|
|
{
|
|
_mainTreePanel.SaveData(DataPath);
|
|
GD.Print("保存成功");
|
|
}
|
|
|
|
private void DoReset()
|
|
{
|
|
_mainTreePanel.ClearData();
|
|
_nodeInfoEditPanel.OnNodesChanged();
|
|
GD.Print("清空成功");
|
|
}
|
|
|
|
#endregion
|
|
}
|