59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"gitea.dwysokinski.me/Kichiyaki/notificationarr/internal/domain"
|
|
)
|
|
|
|
type Sonarr struct {
|
|
publisher Publisher
|
|
}
|
|
|
|
func NewSonaar(publisher Publisher) *Sonarr {
|
|
return &Sonarr{
|
|
publisher: publisher,
|
|
}
|
|
}
|
|
|
|
func (s *Sonarr) Process(ctx context.Context, payload domain.SonarrWebhookPayload) error {
|
|
for _, ep := range payload.Episodes {
|
|
title, err := s.buildTitle(payload.EventType, payload.Series, ep)
|
|
if err != nil {
|
|
return fmt.Errorf("buildTitle: %w", err)
|
|
}
|
|
|
|
msg, err := s.buildMessage(payload.EventType, payload.Series, ep)
|
|
if err != nil {
|
|
return fmt.Errorf("buildMessage: %w", err)
|
|
}
|
|
|
|
if err := s.publisher.Publish(ctx, title, msg); err != nil {
|
|
return fmt.Errorf("Publisher.Publish: %w", err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *Sonarr) buildTitle(evType domain.SonarrEventType, series domain.SonarrSeries, _ domain.SonarrEpisode) (string, error) {
|
|
switch evType {
|
|
case domain.SonarrEventTypeDownload,
|
|
domain.SonarrEventTypeTest:
|
|
return series.Title + " - New episode (Sonarr)", nil
|
|
default:
|
|
return "", domain.ErrUnsupportedSonarrEventType
|
|
}
|
|
}
|
|
|
|
func (s *Sonarr) buildMessage(evType domain.SonarrEventType, _ domain.SonarrSeries, ep domain.SonarrEpisode) (string, error) {
|
|
switch evType {
|
|
case domain.SonarrEventTypeDownload,
|
|
domain.SonarrEventTypeTest:
|
|
return fmt.Sprintf("S%d.E%d %s", ep.SeasonNumber, ep.EpisodeNumber, ep.Title), nil
|
|
default:
|
|
return "", domain.ErrUnsupportedSonarrEventType
|
|
}
|
|
}
|