mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-30 03:36:37 +08:00
101 lines
3.0 KiB
Go
101 lines
3.0 KiB
Go
package handler
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/ShukeBta/MediaStationGo/internal/model"
|
|
"github.com/ShukeBta/MediaStationGo/internal/service"
|
|
)
|
|
|
|
func enrichSubscriptionArtwork(ctx context.Context, svc *service.Container, sub *model.Subscription) {
|
|
if svc == nil || sub == nil {
|
|
return
|
|
}
|
|
// 已有图片且媒体展示字段也齐全时才跳过;否则仍需查一次补 年份/评分/类型 等
|
|
// 富通知字段(老订阅只存了 poster/overview 的情况)。
|
|
if strings.TrimSpace(sub.PosterURL) != "" && strings.TrimSpace(sub.BackdropURL) != "" &&
|
|
sub.Year > 0 && sub.Rating > 0 && strings.TrimSpace(sub.Genres) != "" {
|
|
return
|
|
}
|
|
meta := lookupDisplayMetadata(ctx, svc, sub.Name, sub.Filter, sub.MediaType)
|
|
if meta.Title == "" && meta.PosterURL == "" && meta.BackdropURL == "" && meta.Overview == "" {
|
|
return
|
|
}
|
|
if strings.TrimSpace(sub.Source) == "" {
|
|
sub.Source = meta.Source
|
|
}
|
|
if strings.TrimSpace(sub.PosterURL) == "" {
|
|
sub.PosterURL = meta.PosterURL
|
|
}
|
|
if strings.TrimSpace(sub.BackdropURL) == "" {
|
|
sub.BackdropURL = meta.BackdropURL
|
|
}
|
|
if strings.TrimSpace(sub.Overview) == "" {
|
|
sub.Overview = meta.Overview
|
|
}
|
|
if strings.TrimSpace(sub.OriginalName) == "" {
|
|
sub.OriginalName = meta.OriginalName
|
|
}
|
|
if strings.TrimSpace(sub.OriginalLanguage) == "" {
|
|
sub.OriginalLanguage = meta.OriginalLanguage
|
|
}
|
|
if sub.Year <= 0 && meta.Year > 0 {
|
|
sub.Year = meta.Year
|
|
}
|
|
if sub.Rating <= 0 && meta.Rating > 0 {
|
|
sub.Rating = meta.Rating
|
|
}
|
|
if strings.TrimSpace(sub.Genres) == "" {
|
|
sub.Genres = meta.Genres
|
|
}
|
|
}
|
|
|
|
func enrichAndPersistSubscriptions(ctx context.Context, svc *service.Container, items []model.Subscription) {
|
|
for i := range items {
|
|
before := items[i]
|
|
enrichSubscriptionArtwork(ctx, svc, &items[i])
|
|
updates := subscriptionMetadataUpdates(before, items[i])
|
|
if len(updates) == 0 {
|
|
continue
|
|
}
|
|
if err := svc.Repo.DB.WithContext(ctx).Model(&model.Subscription{}).Where("id = ?", items[i].ID).Updates(updates).Error; err != nil {
|
|
svc.Log.Debug("subscription artwork backfill failed", zap.String("id", items[i].ID), zap.Error(err))
|
|
}
|
|
}
|
|
}
|
|
|
|
func subscriptionMetadataUpdates(before, after model.Subscription) map[string]any {
|
|
updates := map[string]any{}
|
|
if before.Source != after.Source {
|
|
updates["source"] = after.Source
|
|
}
|
|
if before.PosterURL != after.PosterURL {
|
|
updates["poster_url"] = after.PosterURL
|
|
}
|
|
if before.BackdropURL != after.BackdropURL {
|
|
updates["backdrop_url"] = after.BackdropURL
|
|
}
|
|
if before.Overview != after.Overview {
|
|
updates["overview"] = after.Overview
|
|
}
|
|
if before.OriginalName != after.OriginalName {
|
|
updates["original_name"] = after.OriginalName
|
|
}
|
|
if before.OriginalLanguage != after.OriginalLanguage {
|
|
updates["original_language"] = after.OriginalLanguage
|
|
}
|
|
if before.Year != after.Year {
|
|
updates["year"] = after.Year
|
|
}
|
|
if before.Rating != after.Rating {
|
|
updates["rating"] = after.Rating
|
|
}
|
|
if before.Genres != after.Genres {
|
|
updates["genres"] = after.Genres
|
|
}
|
|
return updates
|
|
}
|