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.
235 lines
6.9 KiB
235 lines
6.9 KiB
package v2 |
|
|
|
import ( |
|
"context" |
|
"strconv" |
|
|
|
"go-common/app/interface/live/app-interface/dao" |
|
"go-common/app/interface/live/app-interface/model" |
|
"go-common/app/service/main/account/api" |
|
|
|
v2pb "go-common/app/interface/live/app-interface/api/http/v2" |
|
"go-common/app/interface/live/app-interface/conf" |
|
roomV1 "go-common/app/service/live/room/api/liverpc/v1" |
|
roomV2 "go-common/app/service/live/room/api/liverpc/v2" |
|
"go-common/library/log" |
|
"go-common/library/sync/errgroup" |
|
) |
|
|
|
// 统一cover获取方式 |
|
func (s *IndexService) getCover(userCover string, systemCover string) (cover string) { |
|
if userCover != "" { |
|
cover = userCover |
|
} else { |
|
cover = systemCover |
|
} |
|
return |
|
} |
|
|
|
func (s *IndexService) ifHitSkyHorse(mid int64, device string) (hit bool) { |
|
if mid == 0 { |
|
return false |
|
} |
|
if device == "pad" { |
|
return false |
|
} |
|
lastMid := strconv.Itoa(int(mid % 100)) |
|
if len(lastMid) < 2 { |
|
lastMid = "0" + lastMid |
|
} |
|
_, isSkyHorseGray := s.conf.SkyHorseGray[lastMid] |
|
|
|
return isSkyHorseGray && conf.Conf.SkyHorseStatus |
|
} |
|
|
|
func (s *IndexService) ifHitLiveRec(mid int64, device string) (hit bool) { |
|
if mid == 0 { |
|
return false |
|
} |
|
if device == "pad" { |
|
return false |
|
} |
|
lastMid := strconv.Itoa(int(mid % 100)) |
|
if len(lastMid) < 2 { |
|
lastMid = "0" + lastMid |
|
} |
|
_, isLiveRec := s.conf.LiveGray[lastMid] |
|
return isLiveRec |
|
} |
|
|
|
func (s *IndexService) getRecRoomList(ctx context.Context, roomIds []int64, recPoolRoomListResp map[int64]*v2pb.CommonRoomItem, build int64, platform string, idolDuplicateMap map[int64]bool, recType int64, quality int64) (respRecRoomList []*v2pb.CommonRoomItem, err error) { |
|
wg, wgCtx := errgroup.WithContext(ctx) |
|
|
|
multiRoomListResp := make(map[int64]*roomV2.RoomGetByIdsResp_RoomInfo) |
|
wg.Go(func() error { |
|
// 天马房间基础信息,有错误cancel其他没必要执行 |
|
fields := []string{ |
|
"roomid", |
|
"title", |
|
"uname", |
|
"online", |
|
"cover", |
|
"user_cover", |
|
"link", |
|
"face", |
|
"area_v2_parent_id", |
|
"area_v2_parent_name", |
|
"area_v2_id", |
|
"area_v2_name", |
|
"broadcast_type", |
|
"uid", |
|
} |
|
multiRoomList, err := s.roomDao.GetRoomInfoByIds(wgCtx, roomIds, fields, "app-interface-skyHorseRec") |
|
if err != nil { |
|
log.Error("[getRecRoomList]getByIds error:%+v", err) |
|
} |
|
multiRoomListResp = multiRoomList |
|
return err |
|
}) |
|
|
|
pendantRoomListResp := make(map[int64]*roomV1.RoomPendantGetPendantByIdsResp_Result) |
|
wg.Go(func() error { |
|
pendantRoomList, err := s.roomDao.GetRoomPendant(wgCtx, roomIds, "mobile_index_badge", 2) |
|
if err != nil { |
|
log.Error("[getRecRoomList]getPendantByIds error:%+v", err) |
|
} |
|
pendantRoomListResp = pendantRoomList |
|
return nil |
|
}) |
|
|
|
err = wg.Wait() |
|
if err != nil { |
|
log.Error("[getRecRoomList]wait error(%+v)", err) |
|
return |
|
} |
|
|
|
respSlice := make([]*roomV2.RoomGetByIdsResp_RoomInfo, 0) |
|
for _, roomBaseInfo := range multiRoomListResp { |
|
respSlice = append(respSlice, roomBaseInfo) |
|
} |
|
|
|
respRecRoomList = make([]*v2pb.CommonRoomItem, 0) |
|
for i := 0; i < 6; i++ { |
|
if recInfo, ok := recPoolRoomListResp[int64(i+1)]; ok { |
|
if _, ok := idolDuplicateMap[recInfo.Roomid]; !ok { |
|
respRecRoomList = append(respRecRoomList, recInfo) |
|
continue |
|
} |
|
} |
|
|
|
if len(respSlice) <= 0 { |
|
continue |
|
} |
|
tmpItem := respSlice[0:1][0] |
|
respSlice = respSlice[1:] |
|
pendantValue, pendantBgPic, pendantBgColor := s.getPendant(tmpItem.Roomid, pendantRoomListResp) |
|
// 统一cover产品逻辑 |
|
cover := s.getCover(tmpItem.UserCover, tmpItem.Cover) |
|
|
|
respRecRoomList = append(respRecRoomList, &v2pb.CommonRoomItem{ |
|
Roomid: tmpItem.Roomid, |
|
Title: tmpItem.Title, |
|
Uname: tmpItem.Uname, |
|
Online: tmpItem.Online, |
|
Cover: cover, |
|
Link: "/" + strconv.Itoa(int(tmpItem.Roomid)), |
|
Face: tmpItem.Face, |
|
AreaV2ParentId: tmpItem.AreaV2ParentId, |
|
AreaV2ParentName: tmpItem.AreaV2ParentName, |
|
AreaV2Id: tmpItem.AreaV2Id, |
|
AreaV2Name: tmpItem.AreaV2Name, |
|
BroadcastType: tmpItem.BroadcastType, |
|
PendentRu: pendantValue, |
|
PendentRuPic: pendantBgPic, |
|
PendentRuColor: pendantBgColor, |
|
RecType: recType, |
|
}) |
|
} |
|
|
|
s.getPlayUrl(ctx, respRecRoomList, quality, build, platform) |
|
|
|
return |
|
} |
|
|
|
func (s *IndexService) getExtraDataForRoom(ctx context.Context, roomIds []int64, uids []int64, roomIdToUid map[int64]int64) (extraInfo map[int64]*model.ExtraRecInfo) { |
|
wg, wgCtx := errgroup.WithContext(ctx) |
|
extraInfo = make(map[int64]*model.ExtraRecInfo) |
|
|
|
userInfos := make(map[int64]*api.Info) |
|
wg.Go(func() error { |
|
userResult, err := s.accountDao.GetUserInfos(wgCtx, uids) |
|
if err != nil { |
|
log.Error("[getExtraDataForRoom]getByIds error:%+v", err) |
|
} |
|
userInfos = userResult |
|
return err |
|
}) |
|
|
|
pendantRoomListResp := make(map[int64]*roomV1.RoomPendantGetPendantByIdsResp_Result) |
|
wg.Go(func() error { |
|
pendantRoomList, err := s.roomDao.GetRoomPendant(wgCtx, roomIds, "mobile_index_badge", 2) |
|
if err != nil { |
|
log.Error("[getExtraDataForRoom]getPendantByIds error:%+v", err) |
|
} |
|
pendantRoomListResp = pendantRoomList |
|
return nil |
|
}) |
|
|
|
err := wg.Wait() |
|
if err != nil { |
|
log.Error("[getExtraDataForRoom]getExtraDataForRoom_waitError:%+v", err) |
|
return |
|
} |
|
|
|
for _, roomId := range roomIds { |
|
pendantValue, pendantBgPic, pendantBgColor := s.getPendant(roomId, pendantRoomListResp) |
|
if _, ok := extraInfo[roomId]; !ok { |
|
extraInfo[roomId] = &model.ExtraRecInfo{} |
|
} |
|
extraInfo[roomId].PendentRu = pendantValue |
|
extraInfo[roomId].PendentRuPic = pendantBgPic |
|
extraInfo[roomId].PendentRuColor = pendantBgColor |
|
if uid, ok := roomIdToUid[roomId]; ok { |
|
if _, ok := userInfos[uid]; ok { |
|
extraInfo[roomId].UName = userInfos[uid].Name |
|
extraInfo[roomId].Face = userInfos[uid].Face |
|
} |
|
} |
|
} |
|
|
|
return |
|
} |
|
|
|
func (s *IndexService) getPendant(roomId int64, pendantRoomListResp map[int64]*roomV1.RoomPendantGetPendantByIdsResp_Result) (pendantValue, pendantBgPic, pendantBgColor string) { |
|
if pendantRoomListResp != nil { |
|
if _, ok := pendantRoomListResp[roomId]; ok { |
|
// 移动端取value, web取name |
|
pendantValue = pendantRoomListResp[roomId].Value |
|
pendantBgPic = pendantRoomListResp[roomId].BgPic |
|
if pendantRoomListResp[roomId].BgColor != "" { |
|
pendantBgColor = pendantRoomListResp[roomId].BgColor |
|
} else { |
|
pendantBgColor = _mobileIndexBadgeColorDefault |
|
} |
|
} |
|
} |
|
|
|
return |
|
} |
|
|
|
func (s *IndexService) getPlayUrl(ctx context.Context, roomList []*v2pb.CommonRoomItem, quality, build int64, platform string) { |
|
roomIdsForPlayUrl := make([]int64, 0) |
|
for _, commRoomBlock := range roomList { |
|
roomIdsForPlayUrl = append(roomIdsForPlayUrl, commRoomBlock.Roomid) |
|
} |
|
changeRoomListPlayURLMap := dao.BvcApi.GetPlayUrlMulti(ctx, roomIdsForPlayUrl, 0, quality, build, platform) |
|
|
|
for _, vv := range roomList { |
|
if changeRoomListPlayURLMap[vv.Roomid] != nil { |
|
vv.AcceptQuality = changeRoomListPlayURLMap[vv.Roomid].AcceptQuality |
|
vv.CurrentQuality = changeRoomListPlayURLMap[vv.Roomid].CurrentQuality |
|
vv.PlayUrl = changeRoomListPlayURLMap[vv.Roomid].Url["h264"] |
|
vv.PlayUrlH265 = changeRoomListPlayURLMap[vv.Roomid].Url["h265"] |
|
} |
|
} |
|
}
|
|
|