Files
MeBox/internal/service/subscription_notification.go
T

74 lines
2.1 KiB
Go

package service
import (
"context"
"fmt"
"strings"
"time"
"github.com/ShukeBta/MediaStationGo/internal/model"
)
func (s *SubscriptionService) notifySubscriptionHit(sub *model.Subscription, queued int, resources []string) {
if s == nil || s.notify == nil || sub == nil || queued <= 0 {
return
}
body := fmt.Sprintf("订阅:%s\n新增资源:%d", sub.Name, queued)
if len(resources) > 0 {
body += "\n资源:\n- " + strings.Join(resources, "\n- ")
}
go func() {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
data := map[string]interface{}{}
if strings.TrimSpace(sub.PosterURL) != "" {
data["poster_url"] = sub.PosterURL
}
if strings.TrimSpace(sub.BackdropURL) != "" {
data["backdrop_url"] = sub.BackdropURL
}
if strings.TrimSpace(sub.MediaType) != "" {
data["media_type"] = sub.MediaType
}
if strings.TrimSpace(sub.MediaCategory) != "" {
data["media_category"] = sub.MediaCategory
}
// 补充媒体通知模板(formatTelegramMediaNotification)所需字段:片名 / 原名 /
// 语言 / 年份 / 评分 / 类型 / 简介 / 外链 / 资源标题(供模板提取季集 + 版本)。
// 仅填现成可用的,缺失项模板会自动略过。
if strings.TrimSpace(sub.Name) != "" {
data["title"] = sub.Name
}
if strings.TrimSpace(sub.OriginalName) != "" {
data["original_title"] = sub.OriginalName
}
if strings.TrimSpace(sub.OriginalLanguage) != "" {
data["original_language"] = sub.OriginalLanguage
}
if sub.Year > 0 {
data["year"] = sub.Year
}
if sub.Rating > 0 {
data["rating"] = sub.Rating
}
if strings.TrimSpace(sub.Genres) != "" {
data["genres"] = sub.Genres
}
if strings.TrimSpace(sub.Overview) != "" {
data["overview"] = sub.Overview
}
if id := strings.TrimSpace(sub.IMDBID); id != "" {
data["imdb_url"] = "https://www.imdb.com/title/" + id + "/"
}
if len(resources) > 0 {
data["resource_title"] = resources[0]
}
s.notify.BroadcastEvent(ctx, NotifyEvent{
Type: EventSubscriptionHit,
Title: "MediaStationGo 订阅命中新资源",
Message: body,
Data: data,
})
}()
}