240 lines
6.3 KiB
Go
240 lines
6.3 KiB
Go
package web
|
|
|
|
import (
|
|
"strings"
|
|
"videoweb/app/service/playletser"
|
|
"videoweb/app/service/videoser"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// Play 播放页:GET /api/app/playlet/detail + GET /api/app/playlet/chapter/detail。
|
|
// 文档:http://172.104.181.99:25319/swagger/index.html#/app短剧相关接口/get_api_app_playlet_detail
|
|
func Play(c *gin.Context) {
|
|
if c.Request.URL.Query().Has("guessPage") {
|
|
NotFound(c)
|
|
return
|
|
}
|
|
q := playletser.ParsePlayQuery(c.Param("slug"), c.Param("ep"))
|
|
if strings.TrimSpace(c.Param("ep")) != "" && q.ChapterID <= 0 {
|
|
NotFound(c)
|
|
return
|
|
}
|
|
playletKey := c.Param("slug")
|
|
playlet := playletser.FetchDetailOrNilByKey(c, playletKey)
|
|
if playlet == nil {
|
|
NotFound(c)
|
|
return
|
|
}
|
|
|
|
chapterID := playletser.ResolvePlayChapterID(playlet, q.ChapterID)
|
|
listedChapter := playletser.FindChapter(playlet, chapterID)
|
|
if chapterID <= 0 || (q.ChapterID > 0 && listedChapter == nil) {
|
|
NotFound(c)
|
|
return
|
|
}
|
|
chapter := playletser.FetchChapterDetailOrNil(c, chapterID, playlet.ID, playlet.Slug)
|
|
if chapter == nil {
|
|
if listedChapter != nil {
|
|
chapter = playletser.ChapterFromList(*listedChapter)
|
|
}
|
|
}
|
|
if chapter == nil {
|
|
NotFound(c)
|
|
return
|
|
}
|
|
|
|
seo := playletser.ResolvePlayPageSEO(chapter, playlet)
|
|
title := playletser.ResolvePlayPageTitle(chapter, playlet)
|
|
if title == "" {
|
|
title = "在线播放 - 黄果短剧"
|
|
}
|
|
|
|
hot := playletser.FetchAllListOrEmpty(c, playletser.AllListQuery{
|
|
PageNum: 1,
|
|
PageSize: 8,
|
|
SortType: 2, // 最热
|
|
UpdateStatus: 0, // 全部
|
|
})
|
|
hotList := []playletser.CommonData(nil)
|
|
if hot != nil {
|
|
hotList = hot.List
|
|
}
|
|
|
|
guessPage := playletser.ParseGuessLikePage(c)
|
|
guessLike := playletser.FetchGuessLikeListOrEmpty(c, playletser.GuessLikeQuery{
|
|
PlayletID: playlet.ID,
|
|
PageNum: guessPage,
|
|
PageSize: 6,
|
|
})
|
|
if len(guessLike.List) == 0 && guessPage > 1 {
|
|
guessLike = playletser.FetchGuessLikeListOrEmpty(c, playletser.GuessLikeQuery{
|
|
PlayletID: playlet.ID,
|
|
PageNum: 1,
|
|
PageSize: 6,
|
|
})
|
|
}
|
|
|
|
canWatch := false
|
|
episode := 0
|
|
if chapter != nil {
|
|
canWatch = chapter.AllowWatch()
|
|
episode = chapter.CurrentEpisode
|
|
}
|
|
if episode <= 0 {
|
|
for i, item := range playlet.PlayletChapterInfo {
|
|
if item.ID != chapterID {
|
|
continue
|
|
}
|
|
episode = item.CurrentEpisode
|
|
if episode <= 0 {
|
|
episode = i + 1
|
|
}
|
|
break
|
|
}
|
|
}
|
|
if episode <= 0 {
|
|
episode = 1
|
|
}
|
|
|
|
previewURL := strings.TrimSpace(playlet.Preview)
|
|
mainURL := ""
|
|
if canWatch && chapter != nil {
|
|
mainURL = strings.TrimSpace(chapter.VideoURL)
|
|
}
|
|
|
|
data := gin.H{
|
|
"title": title,
|
|
"navActive": "list",
|
|
"seoInfo": seo,
|
|
"playlet": playlet,
|
|
"chapter": chapter,
|
|
"chapterID": chapterID,
|
|
"episode": episode,
|
|
"canWatch": canWatch,
|
|
"mainURL": mainURL,
|
|
"previewURL": previewURL,
|
|
"hasPreview": previewURL != "",
|
|
"nextChapterID": playletser.NextChapterID(playlet, chapterID),
|
|
"advitise": playlet.Advitise,
|
|
"related": playlet.RelatedRecommendData,
|
|
"guessLike": guessLike.List,
|
|
"guessPage": guessLike.PageNum,
|
|
"guessPageSize": guessLike.PageSize,
|
|
"guessTotal": guessLike.TotalCount,
|
|
"hotList": hotList,
|
|
"hotMoreURL": playletser.AllListURL("all", 0, 0, 2, 1),
|
|
"playResponse": gin.H{
|
|
"playlet": playlet,
|
|
"chapter": chapter,
|
|
"chapterID": chapterID,
|
|
"canWatch": canWatch,
|
|
"mainURL": mainURL,
|
|
"previewURL": previewURL,
|
|
"hasPreview": previewURL != "",
|
|
"guessLike": guessLike,
|
|
"hotList": hotList,
|
|
},
|
|
}
|
|
data["canonicalPath"] = playletser.PlayPath(playlet.Slug, playlet.ID)
|
|
HTMLOK(c, "play.html", data)
|
|
}
|
|
|
|
// SeriesPlay 视频播放页:GET /api/app/video/detail。
|
|
// 文档:http://172.104.181.99:25319/swagger/index.html#/视频相关接口/get_api_app_video_detail
|
|
func SeriesPlay(c *gin.Context) {
|
|
if c.Request.URL.Query().Has("guessPage") {
|
|
NotFound(c)
|
|
return
|
|
}
|
|
key := c.Param("slug")
|
|
video := videoser.FetchVideoDetailOrNilByKey(c, key)
|
|
if video == nil {
|
|
NotFound(c)
|
|
return
|
|
}
|
|
|
|
title := videoser.ResolveVideoPageTitle(video)
|
|
if title == "" {
|
|
title = "在线播放 - 黄果短剧"
|
|
} else {
|
|
title = title + " - 黄果短剧"
|
|
}
|
|
|
|
cover := video.CoverImg
|
|
if cover == "" {
|
|
cover = video.Video.Cover
|
|
}
|
|
videoURL := strings.TrimSpace(video.Video.URL)
|
|
canWatch := videoURL != ""
|
|
|
|
hot := playletser.FetchAllListOrEmpty(c, playletser.AllListQuery{
|
|
PageNum: 1,
|
|
PageSize: 8,
|
|
SortType: 2, // 最热
|
|
UpdateStatus: 0, // 全部
|
|
})
|
|
hotList := []playletser.CommonData(nil)
|
|
if hot != nil {
|
|
hotList = hot.List
|
|
}
|
|
|
|
// 视频详情无 recommendVideos:猜你喜欢与 play.html 一致,走短剧同题材推荐。
|
|
// 以热榜首部短剧为种子 playletId(排除该剧本身)。
|
|
guessPlayletID := int64(0)
|
|
if len(hotList) > 0 {
|
|
guessPlayletID = hotList[0].ID
|
|
}
|
|
guessPage := playletser.ParseGuessLikePage(c)
|
|
guessLike := playletser.FetchGuessLikeListOrEmpty(c, playletser.GuessLikeQuery{
|
|
PlayletID: guessPlayletID,
|
|
PageNum: guessPage,
|
|
PageSize: 6,
|
|
})
|
|
if len(guessLike.List) == 0 && guessPage > 1 {
|
|
guessLike = playletser.FetchGuessLikeListOrEmpty(c, playletser.GuessLikeQuery{
|
|
PlayletID: guessPlayletID,
|
|
PageNum: 1,
|
|
PageSize: 6,
|
|
})
|
|
}
|
|
|
|
data := gin.H{
|
|
"title": title,
|
|
"navActive": "aiSeries",
|
|
"seoInfo": video.SeoInfo,
|
|
"video": video,
|
|
"videoID": video.ID,
|
|
"videoSlug": video.Slug,
|
|
"cover": cover,
|
|
"videoURL": videoURL,
|
|
"canWatch": canWatch,
|
|
"guessLike": guessLike.List,
|
|
"guessPage": guessLike.PageNum,
|
|
"guessPageSize": guessLike.PageSize,
|
|
"guessTotal": guessLike.TotalCount,
|
|
"guessPlayletID": guessPlayletID,
|
|
"advitise": video.Advitise,
|
|
"hotList": hotList,
|
|
"hotMoreURL": playletser.AllListURL("all", 0, 0, 2, 1),
|
|
"videoResponse": gin.H{
|
|
"video": video,
|
|
"videoURL": videoURL,
|
|
"canWatch": canWatch,
|
|
"hotList": hotList,
|
|
"guessLike": guessLike,
|
|
"guessPlayletID": guessPlayletID,
|
|
},
|
|
"playDebug": gin.H{
|
|
"canWatch": canWatch,
|
|
"videoURL": videoURL,
|
|
"cover": cover,
|
|
"videoTime": video.Video.VideoTime,
|
|
},
|
|
}
|
|
if strings.TrimSpace(c.Param("guessPage")) != "" {
|
|
data["canonicalPath"] = videoser.VideoPlayURL(video.Slug, video.ID)
|
|
}
|
|
HTMLOK(c, "seriesPlay.html", data)
|
|
}
|