Branch: m5-pads-tab → main
Go service (internal/app), new methods:
SetName, AssignSampleDialog, AssignSamplePath (used by file drop), ClearPad, SetTune, SetMuteGroup.ChooseExportFolder / ExportFolder(dir, overwrite) and ChooseZipPath / ExportZip(path, overwrite).
exists lists it; the frontend asks, then calls again with overwrite..zip gets it added.internal/app still imports nothing from Wails, so its tests run anywhere. The native dialogs are behind a small Dialogs interface; dialogs.go implements it with Wails.Preview audio (internal/app/audio.go, frontend/src/lib/audio.ts), build plan 4.5:
/audio/<slot>?k=… through the asset server's middleware. The key changes with the source file, so the preview never plays a stale cached sample./audio/<slot>?pcm=1, which Go decodes (the M3 decoder).File drop (main.go): the window accepts files. Pad cells and the empty-pad panel are drop targets carrying data-slot, and they highlight while a file is over them. Go assigns the first .wav dropped and sends the new state as a state event; problems come as an error event. Dropping a non-WAV file shows a message.
Frontend:
tools/xpjdiff: go run ./tools/xpjdiff A.xpj B.xpj compares two projects (the .xpj values and the data-folder files) and prints the differing paths, or identical. It's for checking this milestone.
On the server:
go vet and go test ./... pass (Linux with -tags purego, and GOOS=windows go vet).xpjdiff is tested against T1/T2/T3.The server has no Node, so the frontend is untested here. On the laptop, from the repo root (create C:\temp\m5 first). Use quotes as shown; in PowerShell an unquoted comma splits an argument.
npm run check in frontend: 0 errors, 0 warnings.wails3 dev. In the app:
UiKit.testdata\device\DemoFile_[ProjectData]\PadLp-London Cm114 SA.wav.testdata\device\DemoFile_[ProjectData]\Bass-Pure C.wav from Explorer onto the A02 cell.C:\temp\m5.The same edits with the CLI:
go run ./cmd/mpckit-cli -name CliKit -out C:\temp\m5 -pad "A1=testdata\device\DemoFile_[ProjectData]\PadLp-London Cm114 SA.wav" -pad "A2=testdata\device\DemoFile_[ProjectData]\Bass-Pure C.wav" -tune "A2=-12,50" -mute "A1=1" -mute "A2=1"
go run ./tools/xpjdiff C:\temp\m5\UiKit.xpj C:\temp\m5\CliKit.xpj prints identical. (M5 done-when, part 1.)
Preview: click A01 (a long pad sound), then A02 while it plays: A01 stops. Set A02's group to Off and repeat: both play together. A02 sounds 11.5 semitones lower than untuned (just under an octave). (M5 done-when, part 2.)
Export again to the same folder: a dialog asks before replacing; Cancel writes nothing. Export zip saves UiKit.zip.
Clear A02: the pad empties and the footer drops to 1 sample. Rename to a/b: an error shows and the name goes back.