You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
3.2 KiB
107 lines
3.2 KiB
package service |
|
|
|
import ( |
|
"context" |
|
|
|
"go-common/app/interface/main/space/model" |
|
favmdl "go-common/app/service/main/favorite/model" |
|
"go-common/library/log" |
|
"go-common/library/net/metadata" |
|
"go-common/library/sync/errgroup" |
|
) |
|
|
|
const ( |
|
_typeFavAlbum = 2 |
|
_typeFavMovie = 2 |
|
) |
|
|
|
var _emptyArcFavFolder = make([]*favmdl.VideoFolder, 0) |
|
|
|
// FavNav get fav info. |
|
func (s *Service) FavNav(c context.Context, mid int64, vmid int64) (res *model.FavNav, err error) { |
|
var ( |
|
folder []*favmdl.VideoFolder |
|
plData, topicData, artData *favmdl.Favorites |
|
albumCount, movieCount int |
|
folErr, plErr, topicErr, artErr, albumErr, movieErr error |
|
ip = metadata.String(c, metadata.RemoteIP) |
|
) |
|
group, errCtx := errgroup.WithContext(c) |
|
res = new(model.FavNav) |
|
// video fav folder |
|
if mid == vmid || s.privacyCheck(c, vmid, model.PcyFavVideo) == nil { |
|
group.Go(func() error { |
|
if folder, folErr = s.dao.FavFolder(errCtx, mid, vmid); folErr != nil { |
|
log.Error("s.dao.FavFolder(%d) error(%v)", vmid, folErr) |
|
} else { |
|
res.Archive = folder |
|
} |
|
return nil |
|
}) |
|
} |
|
// playlist |
|
group.Go(func() error { |
|
arg := &favmdl.ArgFavs{Type: favmdl.TypePlayList, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip} |
|
if plData, plErr = s.fav.Favorites(errCtx, arg); plErr != nil { |
|
log.Error("s.fav.Favorites TypePlayVideo (%d) error(%v)", vmid, plErr) |
|
} else if plData != nil { |
|
res.Playlist = plData.Page.Count |
|
} |
|
return nil |
|
}) |
|
// topic |
|
group.Go(func() error { |
|
arg := &favmdl.ArgFavs{Type: favmdl.TypeTopic, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip} |
|
if topicData, topicErr = s.fav.Favorites(errCtx, arg); topicErr != nil { |
|
log.Error("s.fav.Favorites TypeTopic (%d) error(%v)", vmid, topicErr) |
|
} else if topicData != nil { |
|
res.Topic = topicData.Page.Count |
|
} |
|
return nil |
|
}) |
|
// article |
|
group.Go(func() error { |
|
arg := &favmdl.ArgFavs{Type: favmdl.Article, Mid: vmid, Pn: _samplePn, Ps: _samplePs, RealIP: ip} |
|
if artData, artErr = s.fav.Favorites(errCtx, arg); artErr != nil { |
|
log.Error("s.fav.Favorites Article (%d) error(%v)", vmid, artErr) |
|
} else if artData != nil { |
|
res.Article = artData.Page.Count |
|
} |
|
return nil |
|
}) |
|
// album |
|
group.Go(func() error { |
|
if albumCount, albumErr = s.dao.LiveFavCount(errCtx, vmid, _typeFavAlbum); albumErr != nil { |
|
log.Error("s.dao.LiveFavCount(%d,%d) error(%v)", vmid, _typeFavAlbum, albumErr) |
|
} else if albumCount > 0 { |
|
res.Album = albumCount |
|
} |
|
return nil |
|
}) |
|
// movie |
|
if mid > 0 { |
|
group.Go(func() error { |
|
if movieCount, movieErr = s.dao.MovieFavCount(errCtx, mid, _typeFavMovie); movieErr != nil { |
|
log.Error("s.dao.MovieFavCount(%d,%d) error(%v)", vmid, _typeFavMovie, movieErr) |
|
} else if movieCount > 0 { |
|
res.Movie = movieCount |
|
} |
|
return nil |
|
}) |
|
} |
|
group.Wait() |
|
if len(res.Archive) == 0 { |
|
res.Archive = _emptyArcFavFolder |
|
} |
|
return |
|
} |
|
|
|
// FavArchive get favorite archive. |
|
func (s *Service) FavArchive(c context.Context, mid int64, arg *model.FavArcArg) (res *favmdl.SearchArchive, err error) { |
|
if mid != arg.Vmid { |
|
if err = s.privacyCheck(c, arg.Vmid, model.PcyFavVideo); err != nil { |
|
return |
|
} |
|
} |
|
return s.dao.FavArchive(c, mid, arg) |
|
}
|
|
|