This repository has been archived on 2023-04-18. You can view files and clone it, but cannot push or open issues or pull requests.
notificationarr/internal/service/sonaar.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
}
}