Skip to content

feat(cli): add read subcommand - #1753

Open
Robin-Everaars wants to merge 3 commits into
floatpane:release/v1from
Robin-Everaars:feature/cli-read
Open

Robin-Everaars wants to merge 3 commits into
floatpane:release/v1from
Robin-Everaars:feature/cli-read

Conversation

@Robin-Everaars

@Robin-Everaars Robin-Everaars commented Oct 27, 2026 •

Copy link
Copy Markdown

What?

Adds matcha read [--from <email>] [--json] <folder> <uid>. With a single number it reads that UID from INBOX. Plain output prints the body; --json returns body, mime_type and attachment metadata.

backend.Attachment gets snake_case JSON field names, and its raw Data bytes are left out of JSON so a script never gets the attachment as base64.

Why?

Part of #1642. Depends on #1752.

This is one of five small PRs that replace #1680, as asked there: rebuilt on release/v1 and split per command. They stack, so please merge them in order. Each one shows its predecessors' commits until those are merged.

  1. feat(cli): add folders subcommand #1751 folders
  2. feat(cli): add list subcommand #1752 list
  3. feat(cli): add read subcommand #1753 read
  4. feat(cli): add search subcommand #1754 search
  5. feat(cli): add mail manage commands #1755 archive, delete, mark-read, mark-unread, move

Every step passes gofmt, go vet, go test ./..., go mod tidy and golangci-lint on the new code.

Add `matcha folders [--from <email>] [--json]`, the first read-only
mail command next to `send`.

The shared plumbing for the follow-up commands lives in cli/util.go
(account resolution by --from, matching Email and then FetchEmail
case-insensitively) and cli/main.go (hookable config loader, service
constructor and output writers for tests).

daemonclient gains NewCLIClient(cfg, autoStart). With autoStart off, a
one-shot command uses a running daemon and otherwise connects directly
instead of forking a daemon. NewService keeps its behaviour.

Refs floatpane#1642
Add `matcha list [folder] [--from <email>] [--json]`, which prints the
newest 50 messages of a folder (INBOX by default) as a table or as JSON
with uid, from, subject, date and is_read.

Adds the helpers the later read, search and manage commands share:
INBOX normalization, flag parsing that allows flags after positionals,
and the table/JSON email renderer.

Refs floatpane#1642
Add `matcha read [--from <email>] [--json] <folder> <uid>`. A single
numeric argument reads that UID from INBOX. Plain output prints the
body; --json returns body, mime_type and attachment metadata.

backend.Attachment gets explicit snake_case JSON names, and its raw
Data bytes are excluded so scripts never receive the payload as base64.

Refs floatpane#1642
@floatpanebot

Copy link
Copy Markdown
Member

This PR exceeds the recommended size of 1000 lines. Please make sure you are NOT addressing multiple issues with one PR. Note this PR might be rejected due to its size.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/cli CLI flags / commands area/daemon Daemon / RPC enhancement New feature or request size/XL Diff: 800+ lines target/v1 PR targets the release/v1 branch directly

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants