fix memo selection
release / docker-image (push) Successful in 1m9s
release / goreleaser (push) Successful in 10m14s

This commit is contained in:
2026-02-12 18:33:05 +03:00
parent a844ccfc88
commit 868c90c896
2 changed files with 37 additions and 16 deletions
-12
View File
@@ -103,15 +103,3 @@ func (c *Client) DownloadAttachment(ctx context.Context, att Attachment) ([]byte
}
return data, nil
}
// GetRandomMemo fetches a single memo without any filter (for full fallback).
func (c *Client) GetRandomMemo(ctx context.Context) (*Memo, error) {
resp, err := c.ListMemos(ctx, "", 1, "")
if err != nil {
return nil, err
}
if len(resp.Memos) == 0 {
return nil, nil
}
return resp.Memos[0], nil
}
+37 -4
View File
@@ -201,17 +201,50 @@ func (s *Selector) fetchRanges(ctx context.Context, ranges []DateRange) ([]*memo
}
func (s *Selector) fullFallback(ctx context.Context) (*Memory, error) {
memo, err := s.client.GetRandomMemo(ctx)
resp, err := s.client.ListMemos(ctx, "", s.cfg.PageSize, "")
if err != nil {
return nil, fmt.Errorf("full fallback: %w", err)
}
if memo == nil {
allMemos := resp.GetMemos()
if len(allMemos) == 0 {
return nil, nil
}
// Try to apply relaxed cooldown
cooldownSet, err := s.store.GetCooldownMemoNames(ctx, s.cfg.RelaxedCooldownDays)
if err != nil {
return nil, fmt.Errorf("full fallback cooldown: %w", err)
}
var filtered []*memos.Memo
for _, m := range allMemos {
if _, blocked := cooldownSet[m.Name]; !blocked {
filtered = append(filtered, m)
}
}
// If nothing survives cooldown, use all memos
if len(filtered) == 0 {
filtered = allMemos
}
candidates := make([]candidate, len(filtered))
for i, m := range filtered {
candidates[i] = candidate{memo: m}
}
picked := weightedSelect(candidates, false, 0)
if picked == nil {
return nil, nil
}
s.logger.Info("selected memory via full fallback", "memo", picked.memo.Name)
return &Memory{
Memo: memo,
Memo: picked.memo,
Tier: 0,
Date: memo.DisplayTime,
Date: picked.memo.DisplayTime,
}, nil
}