feat: web UI + HTTP server + Electron shell #10

Merged
david merged 4 commits from wip into main 2026-06-22 02:48:06 +00:00
3 changed files with 34 additions and 10 deletions
Showing only changes of commit 815d43ee97 - Show all commits
+1 -1
View File
@@ -3,7 +3,7 @@ IMAGE := akai-fetch
REMOTE := dhg.lol
build:
CGO_ENABLED=0 go build -o $(BIN) .
CGO_ENABLED=0 go build -buildvcs=false -o $(BIN) .
docker:
docker build -t $(IMAGE) .
+23 -8
View File
@@ -374,10 +374,15 @@ func cmdExtract(args []string) {
fs := flag.NewFlagSet("extract", flag.ExitOnError)
isoDir := fs.String("dir", ".", "directory with ISO files")
outDir := fs.String("out", "./wavs", "output directory for WAVs")
toolPath := fs.String("tool", "./extract_wavs.sh", "path to extraction script")
toolFlag := fs.String("tool", "", "path to extraction script (default: auto-detect)")
jobs := fs.Int("jobs", 2, "concurrent extractions")
_ = fs.Parse(args)
toolPath := *toolFlag
if toolPath == "" {
toolPath = findScript("extract_wavs.sh")
}
entries, err := os.ReadDir(*isoDir)
if err != nil {
fatal("read dir: %v", err)
@@ -410,7 +415,7 @@ func cmdExtract(args []string) {
defer func() { <-sem }()
out := *outDir
result, err := extractISO(*toolPath, isoPath, out)
result, err := extractISO(toolPath, isoPath, out)
mu.Lock()
results[filepath.Base(isoPath)] = result
mu.Unlock()
@@ -505,12 +510,7 @@ func cmdPipeline(args []string) {
isoDir := filepath.Join(*baseDir, "isos")
wavDir := filepath.Join(*baseDir, "wavs")
toolPath := filepath.Join(filepath.Dir(os.Args[0]), "extract_wavs.sh")
if _, err := os.Stat(toolPath); os.IsNotExist(err) {
cwd, _ := os.Getwd()
toolPath = filepath.Join(cwd, "extract_wavs.sh")
}
toolPath := findScript("extract_wavs.sh")
// Remaining args after flags are treated as explicit identifiers
identifiers := fs.Args()
@@ -563,6 +563,21 @@ func cmdPipeline(args []string) {
fmt.Printf(" WAVs: %s\n", wavDir)
}
func findScript(name string) string {
candidates := []string{
filepath.Join(filepath.Dir(os.Args[0]), name),
filepath.Join(filepath.Dir(os.Args[0]), "scripts", name),
name,
filepath.Join("scripts", name),
}
for _, p := range candidates {
if _, err := os.Stat(p); err == nil {
return p
}
}
return name
}
// ─── Helpers ───────────────────────────────────────────────────────────
func fatal(format string, args ...any) {
+10 -1
View File
@@ -5,7 +5,16 @@
set -euo pipefail
AKAIUTIL="${AKAIUTIL:-akaiutil}"
if [ -z "${AKAIUTIL:-}" ]; then
if command -v akaiutil &>/dev/null; then
AKAIUTIL="akaiutil"
elif [ -x "/DATA/Downloads/akai/akaiutil-4.6.7/akaiutil" ]; then
AKAIUTIL="/DATA/Downloads/akai/akaiutil-4.6.7/akaiutil"
else
echo "error: akaiutil not found — set AKAIUTIL env var" >&2
exit 1
fi
fi
ISO="${1:?Usage: $0 <iso-file> [output-dir]}"
OUTPUT="${2:-wavs}"