添加移动功能

This commit is contained in:
limil 2026-01-16 11:40:08 +08:00
parent c5fc9ac223
commit c82a22bf31
6 changed files with 47 additions and 10 deletions

View File

@ -38,7 +38,7 @@ public partial class MainTreePanel : Tree
SetColumnTitlesVisible(true); SetColumnTitlesVisible(true);
SetColumnTitle(0, "文件名"); SetColumnTitle(0, "文件名");
SetColumnCustomMinimumWidth(0, 800); SetColumnCustomMinimumWidth(0, 400);
SetColumnExpand(0, true); SetColumnExpand(0, true);
MultiSelected += OnMultiSelected; MultiSelected += OnMultiSelected;

View File

@ -6,4 +6,6 @@ namespace Learn.Config;
public class AppConfig : IConfigItem public class AppConfig : IConfigItem
{ {
public string ScanPath { get; set; } = ""; public string ScanPath { get; set; } = "";
public string TargetPath { get; set; } = "";
} }

View File

@ -6,7 +6,7 @@ using Learn.Parsers;
namespace Learn; namespace Learn;
public class FileMover(string targetPath) public class FileMover(string targetPath, bool preview)
{ {
private readonly HashSet<TreeNode> _visited = new (); private readonly HashSet<TreeNode> _visited = new ();
@ -77,8 +77,8 @@ public class FileMover(string targetPath)
var filename = string.Join(" ", string.Join(" ", filenameParts), string.Join("", metaParts.Select(part => $"[{part}]"))); var filename = string.Join(" ", string.Join(" ", filenameParts), string.Join("", metaParts.Select(part => $"[{part}]")));
filename += Path.GetExtension(path); filename += Path.GetExtension(path);
var filePath = string.Join("/", targetPath, relativePath, filename); var target = string.Join("/", targetPath, relativePath, filename);
node.Info.Info["TargetPath"] = filePath; MoveIt(node, target);
} }
private void MoveExtra(TreeNode node) private void MoveExtra(TreeNode node)
@ -87,8 +87,26 @@ public class FileMover(string targetPath)
var path = node.Info.MainInfo[ItemFields.MainKey_Path]; var path = node.Info.MainInfo[ItemFields.MainKey_Path];
var name = Path.GetFileName(path); var name = Path.GetFileName(path);
var target = string.Join("/", targetPath, relativePath, name); var target = string.Join("/", targetPath, relativePath, "Extra", name);
node.Info.Info["TargetPath"] = target; MoveIt(node, target);
}
private void MoveIt(TreeNode node, string targetPath)
{
node.Info.Info["TargetPath"] = targetPath;
if (preview) return;
var path = node.Info.MainInfo[ItemFields.MainKey_Path];
if (File.Exists(targetPath)) return;
if (Directory.Exists(path))
{
Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
Directory.Move(path, targetPath);
}
else
{
Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
File.Move(path, targetPath);
}
} }
public void DoMove(TreeNode node) public void DoMove(TreeNode node)

14
Main.cs
View File

@ -22,6 +22,7 @@ public partial class Main : Node
[Export] private Button _doParseButton; [Export] private Button _doParseButton;
[Export] private Button _doTMDBParseButton; [Export] private Button _doTMDBParseButton;
[Export] private Button _doMoveButton; [Export] private Button _doMoveButton;
[Export] private Button _startMoveButton;
[Export] private Button _saveButton; [Export] private Button _saveButton;
[Export] private Button _resetButton; [Export] private Button _resetButton;
[Export] private Button _loadButton; [Export] private Button _loadButton;
@ -83,7 +84,8 @@ public partial class Main : Node
_doParseButton.Pressed += DoParse; _doParseButton.Pressed += DoParse;
_doTMDBParseButton.Pressed += DoTMDBParse; _doTMDBParseButton.Pressed += DoTMDBParse;
_saveButton.Pressed += DoSave; _saveButton.Pressed += DoSave;
_doMoveButton.Pressed += DoMove; _doMoveButton.Pressed += () => DoMove(true);
_startMoveButton.Pressed += () => DoMove(false);
_resetButton.Pressed += DoReset; _resetButton.Pressed += DoReset;
_loadButton.Pressed += LoadData; _loadButton.Pressed += LoadData;
_reloadConfigButton.Pressed += ReloadConfig; _reloadConfigButton.Pressed += ReloadConfig;
@ -216,9 +218,9 @@ public partial class Main : Node
private const string DataPath = "data.json"; private const string DataPath = "data.json";
private void DoMove() private void DoMove(bool preview)
{ {
var mover = new FileMover(""); var mover = new FileMover(_configs.Get<AppConfig>().TargetPath, preview);
foreach (var node in _mainTreePanel.SelectingNodes) foreach (var node in _mainTreePanel.SelectingNodes)
{ {
@ -226,6 +228,12 @@ public partial class Main : Node
} }
_mainTreePanel.UpdateColumns(); _mainTreePanel.UpdateColumns();
DoSave();
if (!preview)
{
ScanDir();
}
} }
private void DoSave() private void DoSave()

View File

@ -17,13 +17,14 @@ grow_vertical = 2
[node name="FileDirDialog" type="FileDialog" parent="."] [node name="FileDirDialog" type="FileDialog" parent="."]
script = ExtResource("1_d2g23") script = ExtResource("1_d2g23")
[node name="Main" type="Node" parent="." node_paths=PackedStringArray("_dirSelector", "_openDirButton", "_doParseButton", "_doTMDBParseButton", "_doMoveButton", "_saveButton", "_resetButton", "_loadButton", "_reloadConfigButton", "_nodeInfoEditPanel", "_addKeyButton", "_removeKeyButton", "_inspectorPanel", "_mainTreePanel", "_columnIndexText", "_columnWidthText", "_columnText", "_addColumnButton", "_removeColumnButton", "_clearColumnButton", "_expandAllButton", "_foldAllButton")] [node name="Main" type="Node" parent="." node_paths=PackedStringArray("_dirSelector", "_openDirButton", "_doParseButton", "_doTMDBParseButton", "_doMoveButton", "_startMoveButton", "_saveButton", "_resetButton", "_loadButton", "_reloadConfigButton", "_nodeInfoEditPanel", "_addKeyButton", "_removeKeyButton", "_inspectorPanel", "_mainTreePanel", "_columnIndexText", "_columnWidthText", "_columnText", "_addColumnButton", "_removeColumnButton", "_clearColumnButton", "_expandAllButton", "_foldAllButton")]
script = ExtResource("2_0727o") script = ExtResource("2_0727o")
_dirSelector = NodePath("../FileDirDialog") _dirSelector = NodePath("../FileDirDialog")
_openDirButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/ScanDir") _openDirButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/ScanDir")
_doParseButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/DoParse") _doParseButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/DoParse")
_doTMDBParseButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/DoTMDBParse") _doTMDBParseButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/DoTMDBParse")
_doMoveButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/DoMove") _doMoveButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/DoMove")
_startMoveButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作/StartMove")
_saveButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/保存操作/Save") _saveButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/保存操作/Save")
_resetButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/保存操作/Reset") _resetButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/保存操作/Reset")
_loadButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/保存操作/Load") _loadButton = NodePath("../MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/保存操作/Load")
@ -61,6 +62,8 @@ layout_mode = 2
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_stretch_ratio = 7.0 size_flags_stretch_ratio = 7.0
theme_override_font_sizes/font_size = 8
theme_override_font_sizes/title_button_font_size = 12
allow_search = false allow_search = false
hide_root = true hide_root = true
select_mode = 2 select_mode = 2
@ -114,6 +117,10 @@ layout_mode = 2
text = "整理选中部分 text = "整理选中部分
" "
[node name="StartMove" type="Button" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer/文件夹操作"]
layout_mode = 2
text = "开始移动"
[node name="保存操作" type="VBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer"] [node name="保存操作" type="VBoxContainer" parent="MarginContainer/HSplitContainer/ScrollContainer/VBoxContainer2/FoldableContainer4/VBoxContainer2/TabContainer"]
visible = false visible = false
layout_mode = 2 layout_mode = 2

View File

@ -19,6 +19,8 @@ config/icon="res://icon.svg"
window/size/viewport_width=1600 window/size/viewport_width=1600
window/size/viewport_height=900 window/size/viewport_height=900
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[dotnet] [dotnet]