123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- package goblin
- import (
- "context"
- "time"
- "go-common/app/interface/main/tv/model"
- "go-common/app/interface/main/tv/model/goblin"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- const (
- _pgcLabel = 1
- _ugcLabel = 2
- )
- func (s *Service) labelsproc() {
- for {
- time.Sleep(time.Duration(s.conf.Cfg.IndexLabel.Fre))
- log.Info("Reload Label Data!")
- s.prepareLabels()
- }
- }
- // prepareLabels refreshes memory labels
- func (s *Service) prepareLabels() {
- pgcLbs, errpgc := s.catLabels(_pgcLabel)
- if errpgc != nil {
- log.Error("loadLabels PGC Err %v", errpgc)
- return
- }
- ugcLbs, errugc := s.catLabels(_ugcLabel)
- if errugc != nil {
- log.Error("loadLabels PGC Err %v", errugc)
- return
- }
- if len(pgcLbs) > 0 && len(ugcLbs) > 0 {
- s.labels = &goblin.IndexLabels{
- PGC: pgcLbs,
- UGC: ugcLbs,
- }
- }
- }
- // catLabels picks ugc/pgc all categories labels
- func (s *Service) catLabels(catType int) (result map[int][]*goblin.TypeLabels, err error) {
- var (
- cats []int
- typeMap map[int32]*model.ArcType
- )
- result = make(map[int][]*goblin.TypeLabels)
- if catType == _pgcLabel {
- cats = s.conf.Cfg.ZonesInfo.PGCZonesID
- } else if catType == _ugcLabel {
- if typeMap, err = s.arcDao.FirstTypes(); err != nil {
- log.Error("loadLabels ArcDao FirstTypes Err %v", err)
- return
- }
- for k := range typeMap {
- cats = append(cats, int(k))
- }
- } else {
- err = ecode.TvDangbeiWrongType
- return
- }
- if len(cats) == 0 {
- err = ecode.TvDangbeiPageNotExist
- return
- }
- for _, category := range cats {
- if result[category], err = s.loadLabels(catType, category); err != nil {
- log.Error("loadLabels Err %v", err)
- return
- }
- }
- return
- }
- // getTypeLabel builds an typeLabels object from a slice of labels
- func getTypeLabel(in []*goblin.Label) *goblin.TypeLabels {
- typeLbs := &goblin.TypeLabels{}
- typeLbs.FromLabels(in)
- return typeLbs
- }
- // loadLabels
- func (s *Service) loadLabels(catType, category int) (result []*goblin.TypeLabels, err error) {
- var (
- ctx = context.Background()
- labelMap = make(map[string][]*goblin.Label)
- labels []*goblin.Label
- showOrder []string
- cfg = s.conf.Cfg.IndexLabel
- )
- if labels, err = s.dao.Label(ctx, category, catType); err != nil {
- log.Error("loadLabels Dao Label Cat %d, %d, Err %v", category, catType, err)
- return
- }
- for _, v := range labels { // gather labels by their param
- v.TransYear(cfg)
- labelMap[v.Param] = append(labelMap[v.Param], v)
- }
- if catType == _pgcLabel {
- showOrder = cfg.PGCOrder
- } else {
- showOrder = cfg.UGCOrder
- }
- for _, v := range showOrder {
- if line, ok := labelMap[v]; ok {
- result = append(result, getTypeLabel(line))
- delete(labelMap, v)
- }
- }
- if len(labelMap) > 0 {
- for _, v := range labelMap {
- result = append(result, getTypeLabel(v))
- }
- }
- return
- }
- // Labels picks label
- func (s *Service) Labels(c context.Context, catType, category int) (result []*goblin.TypeLabels, err error) {
- var (
- indexLbs map[int][]*goblin.TypeLabels
- ok bool
- )
- if catType == _pgcLabel {
- indexLbs = s.labels.PGC
- } else {
- indexLbs = s.labels.UGC
- }
- if result, ok = indexLbs[category]; !ok {
- err = ecode.NothingFound
- }
- return
- }
|