LiveViewModel.ets 6.01 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) => {
        //console.error("XXXXZZZZ", '---getContentDetail---1------------')
        success(data)
      }).catch((message: string) => {
        // console.error("XXXXZZZZ", '----getContentDetail--2------------')
        fail(message)
      })
    })

  }

  /**
   *  获取直播间的拉流地址
   * @param vliveId
   * @returns
   */
  async getLiveRoomPullAddress(vliveId: string): Promise<GetPullAddressBean | null> {

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

    })

  }

  //直播详情
  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
  }
}