Commit 2c02fb4

Eric Bower  ·  2026-01-08 10:23:53 -0500 EST
parent 190b37f
chore(feeds): add deprecation notice for free pico users
4 files changed,  +41, -6
+10, -1
......@@ -159,7 +159,16 @@ func Middleware(dbpool db.DB, cfg *shared.ConfigSite) pssh.SSHServerMiddleware {
159159 _, _ = fmt.Fprintf(sesh, "running feed post: %s\r\n", filename)
160160 logger.Info("run cmd", "filename", filename)
161161 fetcher := NewFetcher(dbpool, cfg)
162- err = fetcher.RunPost(logger, user, post, true, time.Now().UTC())
162+
163+ isPicoPlus := false
164+ ff, _ := dbpool.FindFeature(user.ID, "plus")
165+ if ff != nil {
166+ if ff.IsValid() {
167+ isPicoPlus = true
168+ }
169+ }
170+
171+ err = fetcher.RunPost(logger, user, isPicoPlus, post, true, time.Now().UTC())
163172 if err != nil {
164173 _, _ = fmt.Fprintln(sesh.Stderr(), err)
165174 }
+13, -4
......@@ -70,6 +70,7 @@ type DigestFeed struct {
7070 DaysLeft string
7171 ShowBanner bool
7272 SizeWarning bool
73+ IsPicoPlus bool
7374 }
7475
7576 type DigestOptions struct {
......@@ -195,7 +196,7 @@ func (f *Fetcher) Validate(logger *slog.Logger, post *db.Post, parsed *shared.Li
195196 return nil
196197 }
197198
198-func (f *Fetcher) RunPost(logger *slog.Logger, user *db.User, post *db.Post, skipValidation bool, now time.Time) error {
199+func (f *Fetcher) RunPost(logger *slog.Logger, user *db.User, isPicoPlus bool, post *db.Post, skipValidation bool, now time.Time) error {
199200 logger = logger.With("filename", post.Filename)
200201 logger.Info("running feed post")
201202
......@@ -260,7 +261,7 @@ func (f *Fetcher) RunPost(logger *slog.Logger, user *db.User, post *db.Post, ski
260261 subject := fmt.Sprintf("%s feed digest", post.Filename)
261262 unsubURL := getUnsubURL(post)
262263
263- msgBody, err := f.FetchAll(logger, urls, parsed.InlineContent, user.Name, post)
264+ msgBody, err := f.FetchAll(logger, urls, parsed.InlineContent, user.Name, isPicoPlus, post)
264265 if err != nil {
265266 errForUser := err
266267
......@@ -336,13 +337,20 @@ func (f *Fetcher) RunUser(user *db.User, now time.Time) error {
336337 if err != nil {
337338 return err
338339 }
340+ isPicoPlus := false
341+ ff, _ := f.db.FindFeature(user.ID, "plus")
342+ if ff != nil {
343+ if ff.IsValid() {
344+ isPicoPlus = true
345+ }
346+ }
339347
340348 if len(posts.Data) > 0 {
341349 logger.Info("found feed posts", "len", len(posts.Data))
342350 }
343351
344352 for _, post := range posts.Data {
345- err = f.RunPost(logger, user, post, false, now)
353+ err = f.RunPost(logger, user, isPicoPlus, post, false, now)
346354 if err != nil {
347355 logger.Error("run post failed", "err", err)
348356 }
......@@ -471,7 +479,7 @@ func getUnsubURL(post *db.Post) string {
471479 return fmt.Sprintf("https://feeds.pico.sh/unsub/%s", post.ID)
472480 }
473481
474-func (f *Fetcher) FetchAll(logger *slog.Logger, urls []string, inlineContent bool, username string, post *db.Post) (*MsgBody, error) {
482+func (f *Fetcher) FetchAll(logger *slog.Logger, urls []string, inlineContent bool, username string, isPicoPlus bool, post *db.Post) (*MsgBody, error) {
475483 logger.Info("fetching feeds", "inlineContent", inlineContent)
476484 fp := gofeed.NewParser()
477485 daysLeft := ""
......@@ -490,6 +498,7 @@ func (f *Fetcher) FetchAll(logger *slog.Logger, urls []string, inlineContent boo
490498 DaysLeft: daysLeft,
491499 ShowBanner: showBanner,
492500 Options: DigestOptions{InlineContent: inlineContent},
501+ IsPicoPlus: isPicoPlus,
493502 }
494503 feedItems, err := f.db.FindFeedItemsByPostID(post.ID)
495504 if err != nil {
+12, -1
......@@ -9,11 +9,21 @@ img {
99 }
1010 </style>
1111
12+{{if .IsPicoPlus}}
13+{{else}}
14+<blockquote>
15+ <strong>NOTICE:</strong> Our email digest service is moving to our paid <strong>pico+</strong> plan on <strong>2026-01-22</strong> at which point we will stop sending you email digests.
16+ <a href="https://blog.pico.sh/ann-033-moving-rss-to-email-pico-plus">read out annoucement</a>.
17+</blockquote>
18+<br />
19+{{end}}
20+
1221 {{if .SizeWarning}}
1322 <blockquote>
14- <strong>NOTICE:</strong> This email is over the size limit (5MB). Inline content has been enabled to avoid email delivery issues.
23+ <strong>NOTICE:</strong> This email is over the size limit (5MB). Inline content has been disabled to avoid email delivery issues.
1524 We recommend splitting your RSS feeds into multiple digests.
1625 </blockquote>
26+<br />
1727 {{end}}
1828
1929 {{if .ShowBanner}}
......@@ -21,6 +31,7 @@ img {
2131 <strong>NOTICE:</strong> In order to keep this digest email active you must <a href="{{.KeepAliveURL}}">click this link</a>.
2232 You have {{.DaysLeft}} days left.
2333 </blockquote>
34+</br />
2435 {{end}}
2536
2637 <div class="feeds">
+6, -0
......@@ -1,3 +1,9 @@
1+{{if .IsPicoPlus}}
2+{{else}}
3+ > Our email digest service is moving to our paid **pico+** plan on **2026-01-22** at which point we will stop sending you email digests.
4+ > read our announcement: https://blog.pico.sh/ann-033-moving-rss-to-email-pico-plus
5+{{end}}
6+
17 {{if .ShowBanner}}
28 > In order to keep this digest email active you must click the link below. You have {{.DaysLeft}} days left.
39 > {{.KeepAliveURL}}