Files
eleith fa01c23b2b
ci/woodpecker/push/build-docker Pipeline was successful
[feature] skip empty email
digests send an empty note if no entries are available for the digest.
this change adds an option to skip the note entirely
2025-12-24 20:20:10 -08:00

87 lines
2.2 KiB
Go

package processor
import (
"log"
"os"
"miniflux-digest/internal/app"
"miniflux-digest/internal/manager"
"miniflux-digest/internal/models"
miniflux "miniflux.app/v2/client"
)
func ProcessDigest(application *app.App, digestIndex int) (*os.File, []*os.File, *models.OverviewTemplateData, error) {
digestConfig := application.Config.Digests[digestIndex]
entries, err := application.MinifluxClientService.GetAllUnreadEntries()
if err != nil {
log.Printf("Error getting all unread entries: %v", err)
return nil, nil, nil, err
}
digestManager, err := manager.NewDigestManager(application.Config.Digests)
if err != nil {
log.Printf("Error creating digest manager: %v", err)
return nil, nil, nil, err
}
var digestEntries []*models.Entry
for _, entry := range entries {
if digestManager.GetOwningDigest(entry) == digestIndex {
digestEntries = append(digestEntries, entry)
}
}
icons := make(map[int64]*models.FeedIcon)
for _, entry := range digestEntries {
if _, ok := icons[entry.FeedID]; !ok {
icon, err := application.MinifluxClientService.FeedIcon(entry.FeedID)
if err != nil {
log.Printf("Warning: failed to fetch icon for feed %d: %v", entry.FeedID, err)
continue
}
icons[entry.FeedID] = &models.FeedIcon{
FeedID: icon.FeedID,
Data: icon.Data,
}
}
}
data := application.DigestService.BuildDigestData(
digestEntries,
icons,
digestConfig.View,
application.Config.Miniflux.Host,
digestConfig.Host,
digestConfig.Categories,
digestConfig.Title,
)
if len(digestEntries) == 0 {
return nil, nil, data, nil
}
overviewFile, groupedEntryFiles, err := application.ArchiveService.MakeArchiveHTML(data, *digestConfig.Compress)
if err != nil {
log.Printf("Error generating HTML: %v", err)
return nil, nil, nil, err
}
if digestConfig.MarkAsRead {
var entryIDs []int64
for _, entry := range digestEntries {
entryIDs = append(entryIDs, entry.ID)
}
if len(entryIDs) > 0 {
err := application.MinifluxClientService.UpdateEntries(entryIDs, miniflux.EntryStatusRead)
if err != nil {
log.Printf("Error marking entries as read: %v", err)
}
}
}
return overviewFile, groupedEntryFiles, data, nil
}