fix: stabilize STRM and cloud playback

This commit is contained in:
ShukeBta
2026-06-12 22:57:50 +08:00
parent d1a8824842
commit 5d942f2c42
12 changed files with 304 additions and 60 deletions
+27 -6
View File
@@ -12,6 +12,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/ShukeBta/MediaStationGo/internal/middleware"
"github.com/ShukeBta/MediaStationGo/internal/model"
"github.com/ShukeBta/MediaStationGo/internal/service"
)
@@ -118,12 +119,13 @@ func generateSTRMHandler(svc *service.Container) gin.HandlerFunc {
strmSvc = service.NewSTRMService(svc.Log, svc.Repo, svc.Cfg)
}
res, err := strmSvc.GenerateForLibrary(c.Request.Context(), service.GenerateSTRMOptions{
LibraryID: req.LibraryID,
OutputDir: req.OutputDir,
BaseURL: req.BaseURL,
Enabled: req.Enabled,
Overwrite: req.Overwrite,
IncludeLocal: true,
LibraryID: req.LibraryID,
OutputDir: req.OutputDir,
BaseURL: req.BaseURL,
Enabled: req.Enabled,
Overwrite: req.Overwrite,
IncludeLocal: true,
PlaybackToken: strmPlaybackTokenForRequest(c, svc),
})
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
@@ -132,3 +134,22 @@ func generateSTRMHandler(svc *service.Container) gin.HandlerFunc {
c.JSON(http.StatusOK, res)
}
}
func strmPlaybackTokenForRequest(c *gin.Context, svc *service.Container) string {
if svc == nil || svc.Auth == nil || svc.Repo == nil || svc.Repo.User == nil {
return ""
}
uid := middleware.GetUserID(c)
if uid == "" {
return ""
}
u, err := svc.Repo.User.FindByID(c.Request.Context(), uid)
if err != nil || u == nil {
return ""
}
token, err := svc.Auth.IssueEmbyToken(u)
if err != nil {
return ""
}
return token
}