From b5ab610893f1642a955062e08ff164f792162551 Mon Sep 17 00:00:00 2001 From: chenxiangtong Date: Thu, 28 May 2026 20:13:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=89=93=E5=8C=85?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8Dbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + CLAUDE.md | 6 +++-- Makefile | 11 ++++----- actions.go | 22 +++++++++++++++++ api.go | 1 + backend/data.db | Bin 12288 -> 12288 bytes pages.go | 5 ++++ winres/favicon.png | Bin 0 -> 21487 bytes winres/winres.json | 58 +++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 winres/favicon.png create mode 100644 winres/winres.json diff --git a/.gitignore b/.gitignore index 7c2a053..2b71ff9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *.exe *.exe~ *.dll +*.syso *.so *.dylib diff --git a/CLAUDE.md b/CLAUDE.md index e61d96d..b2f8b0f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -10,7 +10,7 @@ model.go 顶层 model 定义,page 枚举,Init/Update/View 路由 pages.go 4 个页面的 update/view + resetExecState + describeAction scan.go 扫描 /*/.minecraft/versions/* 目录 api.go HTTP 客户端 + Action/StepResponse 类型定义 -actions.go action 执行引擎(download/unzip/delete/copy/move/backup) +actions.go action 执行引擎(download/unzip/delete/copy/move/new/backup) items.go list.Item 实现:versionItem, menuItem, mirrorItem styles.go lipgloss 样式常量 backend/ Python FastAPI 后端(独立进程,端口 3131) @@ -92,7 +92,8 @@ pageVersionSelect ──Enter──▶ pageMainMenu ──"输入数字码"─ {"type": "add", "path": "相对路径", "unzip": false, "url": "https://...", "mirrors": ["https://..."]}, {"type": "delete", "path": "相对路径"}, {"type": "copy", "path": "源相对路径", "new_path": "目标相对路径"}, - {"type": "move", "path": "源相对路径", "new_path": "目标相对路径"} + {"type": "move", "path": "源相对路径", "new_path": "目标相对路径"}, + {"type": "new", "path": "相对路径", "is_dir": false} ] } ``` @@ -109,6 +110,7 @@ pageVersionSelect ──Enter──▶ pageMainMenu ──"输入数字码"─ | `delete` | 删除 path | 删前备份 | | `copy` | 复制 path→new_path | new_path 已存在则备份 | | `move` | os.Rename,失败则 copy+delete | new_path 已存在则备份 | +| `new` | is_dir=true 创建目录,否则创建空文件(父目录自动创建)。目标已存在则跳过 | 无 | ### 备份 diff --git a/Makefile b/Makefile index 1c2cf5d..7fbb184 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,8 @@ -.PHONY: all backend +.PHONY: all backend manager -all: dist/amt.exe - ./dist/amt.exe - -dist/amt.exe: $(wildcard *.go) go.mod go.sum - @mkdir -p dist - go build -o dist/amt.exe . +all: $(wildcard *.go) go.mod go.sum + @if not exist dist mkdir dist + go build -o dist/amt.exe -ldflags "-w -s" backend: cd backend && uv run main.py diff --git a/actions.go b/actions.go index 1c30e57..f70e703 100644 --- a/actions.go +++ b/actions.go @@ -64,6 +64,28 @@ func executeAction(versionDir string, action Action, index int, backupDir string } return actionCompleteMsg{index: index} } + case "new": + return func() tea.Msg { + absPath := filepath.Join(versionDir, action.Path) + if _, err := os.Stat(absPath); err == nil { + return actionCompleteMsg{index: index} + } + if action.IsDir { + if err := os.MkdirAll(absPath, 0o755); err != nil { + return actionErrorMsg{index: index, err: fmt.Errorf("create dir failed: %w", err)} + } + } else { + if err := os.MkdirAll(filepath.Dir(absPath), 0o755); err != nil { + return actionErrorMsg{index: index, err: fmt.Errorf("mkdir failed: %w", err)} + } + f, err := os.Create(absPath) + if err != nil { + return actionErrorMsg{index: index, err: fmt.Errorf("create file failed: %w", err)} + } + f.Close() + } + return actionCompleteMsg{index: index} + } default: return func() tea.Msg { return actionErrorMsg{index: index, err: fmt.Errorf("unknown action type: %s", action.Type)} diff --git a/api.go b/api.go index 11a7110..913eee7 100644 --- a/api.go +++ b/api.go @@ -22,6 +22,7 @@ type Action struct { Unzip bool `json:"unzip,omitempty"` URL string `json:"url,omitempty"` Mirrors []string `json:"mirrors,omitempty"` + IsDir bool `json:"is_dir,omitempty"` } type actionsReceivedMsg struct{ actions []Action } diff --git a/backend/data.db b/backend/data.db index 0606bb615dfd829486e6b0fc4a2a6df462b06785..3a728bebe7952be515ebc78a82af443a5e16a17b 100644 GIT binary patch delta 306 zcmZojXh@hK&B!rP#+i|0W5N=C4kkVx27Y-yo`r>cyiEd3Yz(3;!or3I1_qOLrx?bQF{d5=$~b zTs->pK}N=xq!yRxRb>`{G?nIo7*+};MWv}AZcz@%h>Vhwg1BNUef^ZgGGu!(_2*_5 z73CKd12sj1brIGSTN_)Oms&DeUj8Wu6aRY#{`dSpHVY~|<`?8(7G(tao{61Vl+)1A G#1sIs^I+}( delta 57 zcmZojXh@hK&B#1a#+i|MW5N=CHb#DV27dX?f(oMiljY@~0{K4}_ %s ...", prefix, a.Path, a.NewPath)) case "move": return subtleStyle.Render(fmt.Sprintf("%s 移动 %s -> %s ...", prefix, a.Path, a.NewPath)) + case "new": + if a.IsDir { + return subtleStyle.Render(fmt.Sprintf("%s 新建文件夹 %s ...", prefix, a.Path)) + } + return subtleStyle.Render(fmt.Sprintf("%s 新建文件 %s ...", prefix, a.Path)) default: return subtleStyle.Render(fmt.Sprintf("%s %s %s ...", prefix, a.Type, a.Path)) } diff --git a/winres/favicon.png b/winres/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee47006e8a517f6017c025b96285debc4a23247 GIT binary patch literal 21487 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 literal 0 HcmV?d00001 diff --git a/winres/winres.json b/winres/winres.json new file mode 100644 index 0000000..7a33264 --- /dev/null +++ b/winres/winres.json @@ -0,0 +1,58 @@ +{ + "RT_GROUP_ICON": { + "APP": { + "0000": ["favicon.png"] + } + }, + "RT_MANIFEST": { + "#1": { + "2052": { + "identity": { + "name": "", + "version": "" + }, + "description": "ARinera Minecraft Tool", + "minimum-os": "win7", + "execution-level": "highest", + "ui-access": false, + "auto-elevate": false, + "dpi-awareness": "system", + "disable-theming": false, + "disable-window-filtering": false, + "high-resolution-scrolling-aware": false, + "ultra-high-resolution-scrolling-aware": false, + "long-path-aware": false, + "printer-driver-isolation": false, + "gdi-scaling": false, + "segment-heap": false, + "use-common-controls-v6": false + } + } + }, + "RT_VERSION": { + "#1": { + "0000": { + "fixed": { + "file_version": "1.0.0", + "product_version": "1.0.0" + }, + "info": { + "2052": { + "Comments": "", + "CompanyName": "", + "FileDescription": "", + "FileVersion": "", + "InternalName": "", + "LegalCopyright": "", + "LegalTrademarks": "", + "OriginalFilename": "", + "PrivateBuild": "", + "ProductName": "", + "ProductVersion": "", + "SpecialBuild": "" + } + } + } + } + } +}