docs: add sticker command refactor plan
This commit is contained in:
@@ -0,0 +1,59 @@
|
|||||||
|
# Sticker Refactor Implementation Plan
|
||||||
|
|
||||||
|
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||||
|
|
||||||
|
**Goal:** Move EXIF generation and WebP conversion helpers out of sticker.go into helper packages.
|
||||||
|
|
||||||
|
**Architecture:**
|
||||||
|
1. Create `helper/exif.go` handling exif metadata extraction.
|
||||||
|
2. Create `helper/media_convert.go` abstracting commands like `cwebp` and `ffmpeg` wrappers to convert byte slices to webp.
|
||||||
|
3. Simplify `cmds/media/sticker.go` to depend on these new exports.
|
||||||
|
|
||||||
|
**Tech Stack:** Go, exec, Neo Context, `waProto`
|
||||||
|
|
||||||
|
## Global Constraints
|
||||||
|
- Only use standard library inside `helper/` where possible (no whatsapp dependencies except general bytes handling).
|
||||||
|
- The behavior of the `/Users/fd/Documents/perf/cmds/media/sticker.go` command should remain functionally identical.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Task 1: Migrate Exif Support to Helper
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Create: `/Users/fd/Documents/perf/helper/exif.go`
|
||||||
|
- Modify: `/Users/fd/Documents/perf/cmds/media/sticker.go`
|
||||||
|
|
||||||
|
**Interfaces:**
|
||||||
|
- Produces: `helper.CreateDynamicExif(args []string) (exifPath string, cleanup bool)`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Write `exif.go`**
|
||||||
|
Extract `exifData`, `webpExif`, `getOrCreateDefaultExif`, and `resolveExif` into `helper/exif.go`. Make `resolveExif` exported as `ResolveExif`. Ensure it uses the existing env logic. Keep `uuid` dependency.
|
||||||
|
|
||||||
|
- [ ] **Step 2: Update `sticker.go` EXIF usage**
|
||||||
|
Remove the exif functions/structs from `sticker.go` and update `Sticker.Run` to call `helper.ResolveExif(ctx.Arguments())`.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Commit**
|
||||||
|
|
||||||
|
### Task 2: Abstract Conversion Functions
|
||||||
|
|
||||||
|
**Files:**
|
||||||
|
- Create: `/Users/fd/Documents/perf/helper/media_convert.go`
|
||||||
|
- Modify: `/Users/fd/Documents/perf/cmds/media/sticker.go`
|
||||||
|
|
||||||
|
**Interfaces:**
|
||||||
|
- Produces:
|
||||||
|
`ConvertImageToSticker(imgData []byte, exifPath string) ([]byte, error)`
|
||||||
|
`ConvertVideoToSticker(vidData []byte, exifPath string) ([]byte, error)`
|
||||||
|
`RewriteStickerExif(webpData []byte, exifPath string) ([]byte, error)`
|
||||||
|
|
||||||
|
- [ ] **Step 1: Create `media_convert.go`**
|
||||||
|
Implement the three conversion functions. Each should take bytes (downloaded media) and an `exifPath`, do the conversion via `exec.Command`, inject exif via `webpmux`, clean up its own internal temp files, and return the final `[]byte` of the webp ready to send. (They don't need Whatsapp Context).
|
||||||
|
|
||||||
|
- [ ] **Step 2: Update `sticker.go` media usage**
|
||||||
|
Remove `cmdStickerImage`, `cmdStickerVideo`, and `cmdStickerRewrite` from `sticker.go`. Instead, in `Sticker.Run`, download the bytes directly using `ctx.Client().Download(...)`, then pass those bytes to the `helper.ConvertX` functions, and `ctx.SendSticker()` the returned bytes.
|
||||||
|
|
||||||
|
- [ ] **Step 3: Test build**
|
||||||
|
Run `go build ./...`
|
||||||
|
|
||||||
|
- [ ] **Step 4: Commit**
|
||||||
|
`git commit -m "refactor: extract media conversion logic to helper"`
|
||||||
Reference in New Issue
Block a user