mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-08 14:26:37 +08:00
split metadata enrichment helpers
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user