LiveViewModel.ets 5.7 KB
import { ContentDetailDTO,
  GetPullAddressBean,
  LiveDetailsBean, LiveRoomBean, LiveRoomDataBean,
  LiveRoomItemBean,
  ValueType } from 'wdBean/Index'
import { ContentDetailRequest } from 'wdDetailPlayApi/Index'
import { Logger } from 'wdKit/Index'
import { ToastUtils } from 'wdKit/src/main/ets/utils/ToastUtils'
import { ResponseDTO } from 'wdNetwork/Index'
import { LiveModel } from './LiveModel'

const TAG = "LiveViewModel"

export class LiveViewModel {
  liveModel: LiveModel

  constructor() {
    this.liveModel = new LiveModel()
  }

  // 视频信息
  getContentDetail(contentId: string, relId: string, relType: string) {
    return new Promise<Array<ContentDetailDTO>>((success, fail) => {
      this.liveModel.getContentDetail(contentId, relId, relType).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })

  }

  async getLiveRoomPullAddress(vliveId:string) : Promise<GetPullAddressBean>{

    return new Promise<GetPullAddressBean>((success, fail) => {
      ContentDetailRequest.getLiveRoomPullStream(vliveId).then(async (resDTO: ResponseDTO<GetPullAddressBean>) => {
        console.log(TAG, 'getContentDetail:', JSON.stringify(resDTO.data))
        if (resDTO.data) {
          success(resDTO.data)
        }
      }).catch(() => {
        fail("数据为空")
      })

    })

  }

  //直播详情
  getLiveDetails(contentId: string, relId: string, relType: string) {
    return new Promise<Array<LiveDetailsBean>>((success, fail) => {
      this.liveModel.getLiveDetails(contentId, relId, relType).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }

  //直播详情直播间数据列表
  getLiveList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
    return new Promise<LiveRoomBean>((success, fail) => {
      this.liveModel.getLiveList(pageNum, mLiveId, liveId, pageSize).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }

  //直播详情大家聊数据列表
  getLiveChatList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
    return new Promise<LiveRoomBean>((success, fail) => {
      this.liveModel.getLiveChatList(pageNum, mLiveId, liveId, pageSize).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }

  //C端评论列表  竖屏直播间
  getLiveCommentList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
    return new Promise<LiveRoomBean>((success, fail) => {
      this.liveModel.getLiveCommentList(pageNum, mLiveId, liveId, pageSize).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }

  //直播详情直播间数据
  getLiveRoomData(liveId: string) {
    return new Promise<LiveRoomDataBean>((success, fail) => {
      this.liveModel.getLiveRoomData(liveId).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }
  // 直播详情-C端点赞接口
  getLiveRoomNumberLike(liveId: string, number: number, deviceId: string | number) {
    return new Promise<number>((success, fail) => {
      this.liveModel.getLiveRoomNumberLike(liveId, number, deviceId).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }
  // 直播详情-查询是否点赞接口
  getLiveLike(liveId: string, userId: ValueType, deviceId: string | number) {
    return new Promise<boolean>((success, fail) => {
      this.liveModel.getLiveLike(liveId, userId, deviceId).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }

  //直播预约状态查询
  getLiveAppointmentStatus(relationId: string, liveId: string) {
    return new Promise<boolean>((success, fail) => {
      this.liveModel.getLiveAppointmentStatus(relationId, liveId).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }

  //直播预约/取消预约
  liveAppointment(relationId: string, liveId: string, isSubscribe: boolean) {
    return new Promise<ResponseDTO<string>>((success, fail) => {
      this.liveModel.liveAppointment(relationId, liveId, isSubscribe).then((data) => {
        success(data)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }

  // 发送评论
  sendComment(comment: string, content: ContentDetailDTO) {
    return new Promise<LiveRoomItemBean | undefined>((success, fail) => {
      this.liveModel.liveSendComment(comment, content).then((data) => {
        Logger.debug(TAG, "发送评论结果: " + JSON.stringify(data))
        if (data.preDisplay) {
          success(data.commentItem)
        } else {
          success(undefined)
        }
        ToastUtils.showToast(data.tipMessage, 3000)
      }).catch((message: string) => {
        fail(message)
      })
    })
  }

  deepCopyLiveRoomItem(item: LiveRoomItemBean) {
    return item
    let retItem: LiveRoomItemBean = {} as LiveRoomItemBean
    retItem.text = item.text
    retItem.senderUserAvatarUrl = item.senderUserAvatarUrl
    retItem.senderUserName = item.senderUserName
    retItem.pictureUrls = item.pictureUrls
    retItem.time = item.time
    retItem.isWall = item.isWall
    retItem.isTop = item.isTop
    retItem.dataType = item.dataType
    retItem.transcodeImageUrl = item.transcodeImageUrl
    retItem.videoUrl = item.videoUrl
    retItem.pictureResolutions = item.pictureResolutions
    retItem.duration = item.duration
    retItem.audioUrl = item.audioUrl
    retItem.fullColumnImgUrlDto = item.fullColumnImgUrlDto
    return retItem
  }
}