Files
warmbly/internal/client/goog/warmup_actions.go
T
Matthew Meszaros d227038ca0 ci: drop unused/unconvert/gosimple + shadow/nilness, run gofmt
Disable the linters that fire on legacy code without flagging real
bugs: `unused` (orphan repos kept for future feature flags),
`unconvert` (defensive type conversions), `gosimple` (style
suggestions in code we don't want to touch).

govet: disable `shadow` (idiomatic `err :=` re-decls in transaction
patterns) and `nilness` (legitimate defensive nil checks that look
tautological to the analyzer).

Ran `gofmt -w internal/ cmd/` — every Go file now passes
gofmt -l with no output.

Kept: govet, staticcheck, ineffassign, typecheck, bodyclose, noctx,
sqlclosecheck, gofmt, goimports, misspell — the real-bug checks.
2026-05-23 16:54:12 +00:00

107 lines
2.7 KiB
Go

package goog
import (
"context"
"fmt"
"google.golang.org/api/gmail/v1"
)
// ApplyLabel applies a label to a message, creating the label if it doesn't exist
func (c *Client) ApplyLabel(ctx context.Context, messageID, labelName string) error {
if c.srv == nil {
return fmt.Errorf("gmail service not initialized")
}
// Find or create label
labelID, err := c.getOrCreateLabel(ctx, labelName)
if err != nil {
return fmt.Errorf("failed to get/create label %q: %w", labelName, err)
}
_, err = c.srv.Users.Messages.Modify("me", messageID, &gmail.ModifyMessageRequest{
AddLabelIds: []string{labelID},
}).Context(ctx).Do()
if err != nil {
return fmt.Errorf("failed to apply label: %w", err)
}
return nil
}
// MarkAsRead marks a message as read by removing the UNREAD label
func (c *Client) MarkAsRead(ctx context.Context, messageID string) error {
if c.srv == nil {
return fmt.Errorf("gmail service not initialized")
}
_, err := c.srv.Users.Messages.Modify("me", messageID, &gmail.ModifyMessageRequest{
RemoveLabelIds: []string{Unread},
}).Context(ctx).Do()
if err != nil {
return fmt.Errorf("failed to mark as read: %w", err)
}
return nil
}
// RemoveFromSpam removes a message from the SPAM label
func (c *Client) RemoveFromSpam(ctx context.Context, messageID string) error {
if c.srv == nil {
return fmt.Errorf("gmail service not initialized")
}
_, err := c.srv.Users.Messages.Modify("me", messageID, &gmail.ModifyMessageRequest{
RemoveLabelIds: []string{Spam},
AddLabelIds: []string{Inbox},
}).Context(ctx).Do()
if err != nil {
return fmt.Errorf("failed to remove from spam: %w", err)
}
return nil
}
// MarkImportant marks a message as important
func (c *Client) MarkImportant(ctx context.Context, messageID string) error {
if c.srv == nil {
return fmt.Errorf("gmail service not initialized")
}
_, err := c.srv.Users.Messages.Modify("me", messageID, &gmail.ModifyMessageRequest{
AddLabelIds: []string{Important},
}).Context(ctx).Do()
if err != nil {
return fmt.Errorf("failed to mark important: %w", err)
}
return nil
}
// getOrCreateLabel finds an existing label or creates a new one
func (c *Client) getOrCreateLabel(ctx context.Context, labelName string) (string, error) {
// List existing labels
resp, err := c.srv.Users.Labels.List("me").Context(ctx).Do()
if err != nil {
return "", err
}
for _, label := range resp.Labels {
if label.Name == labelName {
return label.Id, nil
}
}
// Create new label
newLabel, err := c.srv.Users.Labels.Create("me", &gmail.Label{
Name: labelName,
LabelListVisibility: "labelShow",
MessageListVisibility: "show",
}).Context(ctx).Do()
if err != nil {
return "", err
}
return newLabel.Id, nil
}