LiveModel.ets 9.32 KB
import { HttpUrlUtils, HttpUtils, ResponseDTO } from 'wdNetwork';
import { HttpRequest } from 'wdNetwork/src/main/ets/http/HttpRequest';
import { Logger, ToastUtils, EmitterEventId, EmitterUtils, SPHelper } from 'wdKit';
import { ContentDetailDTO, LiveDetailsBean, LiveRoomBean, LiveRoomDataBean, ReserveItemBean, ValueType } from 'wdBean/Index';
import { ContentDetailRequest } from 'wdDetailPlayApi/Index';
import { SpConstants } from 'wdConstant/Index';

const TAG = 'LiveModel'

export class LiveModel {
  getContentDetail(contentId: string, relId: string, relType: string) {
    return new Promise<Array<ContentDetailDTO>>((success, fail) => {
      ContentDetailRequest.getContentDetail({
        contentId: contentId,
        relId: relId,
        relType: relType
      }).then(async (resDTO: ResponseDTO<ContentDetailDTO[]>) => {
        console.log(TAG, 'getContentDetail:', JSON.stringify(resDTO.data))
        if (resDTO.data) {
          success(resDTO.data)
        }
      }).catch(() => {
        fail("数据为空")
      })

    })

  }

  /**
   * 直播内容详情
   * @param contentId
   * @param relId 关系id
   * @param relType 关系类型;1.频道关系;2.专题关系;
   * @returns
   */
  getLiveDetails(contentId: string, relId: string, relType: string) {
    return new Promise<Array<LiveDetailsBean>>((success, fail) => {
      HttpRequest.get<ResponseDTO<Array<LiveDetailsBean>>>(
        HttpUrlUtils.getLiveDetailsUrl() + `?relId=${relId}&relType=${relType}&contentId=${contentId}`,
      ).then((data: ResponseDTO<Array<LiveDetailsBean>>) => {
        if (!data || !data.data) {
          fail("数据为空")
          return
        }
        if (data.code != 0) {
          fail(data.message)
          return
        }
        success(data.data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.message)
      })
    })
  }

  /**
   * 获取直播详情页面直播间数据列表
   * @param pageNum
   * @param mLiveId
   * @param liveId
   * @param pageSize
   * @returns
   */
  getLiveList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
    let params: Record<string, string> = {};
    params['pageNum'] = pageNum + ''
    params['mLiveId'] = mLiveId
    params['liveId'] = liveId
    params['pageSize'] = pageSize + ''
    return new Promise<LiveRoomBean>((success, fail) => {
      HttpRequest.post<ResponseDTO<LiveRoomBean>>(
        HttpUrlUtils.getLiveListUrl(),
        params,
      ).then((data: ResponseDTO<LiveRoomBean>) => {
        if (!data || !data.data) {
          fail("数据为空")
          return
        }
        if (data.code != 0) {
          fail(data.message)
          return
        }
        success(data.data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.toString())
      })
    })
  }

  /**
   * 获取直播详情页面大家聊数据列表
   * @param pageNum
   * @param mLiveId
   * @param liveId
   * @param pageSize
   * @returns
   */
  getLiveChatList(pageNum: number, mLiveId: string, liveId: string, pageSize: number) {
    let params: Record<string, string> = {};
    params['pageNum'] = pageNum + ''
    params['mLiveId'] = mLiveId
    params['liveId'] = liveId
    params['pageSize'] = pageSize + ''
    return new Promise<LiveRoomBean>((success, fail) => {
      HttpRequest.post<ResponseDTO<LiveRoomBean>>(
        HttpUrlUtils.getLiveChatListUrl(),
        params,
      ).then((data: ResponseDTO<LiveRoomBean>) => {
        if (!data || !data.data) {
          fail("数据为空")
          return
        }
        if (data.code != 0) {
          fail(data.message)
          return
        }
        success(data.data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.toString())
      })
    })
  }

  /**
   * 获取直播数据
   * @param liveId
   * @returns
   */
  getLiveRoomData(liveId: string) {
    return new Promise<LiveRoomDataBean>((success, fail) => {
      HttpRequest.get<ResponseDTO<LiveRoomDataBean>>(
        HttpUrlUtils.getLiveRoomDataUrl() + `?liveId=${liveId}`,
      ).then((data: ResponseDTO<LiveRoomDataBean>) => {
        if (!data || !data.data) {
          fail("数据为空")
          return
        }
        if (data.code != 0) {
          fail(data.message)
          return
        }
        success(data.data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.toString())
      })
    })
  }

  /**
   * 直播详情-C端点赞接口
   * @param liveId
   * @param number
   * @param deviceId
   * @returns
   */
  getLiveRoomNumberLike(liveId: string, number: number, deviceId: string | number) {
    return new Promise<number>((success, fail) => {
      HttpRequest.get<ResponseDTO<number>>(
        HttpUrlUtils.getLiveRoomNumberLikeUrl() + `?liveId=${liveId}&number=${number}&deviceId=${deviceId}`,
      ).then((data: ResponseDTO<number>) => {
        if (!data || !data.data) {
          fail("数据为空")
          return
        }
        if (data.code != 0) {
          fail(data.message)
          return
        }
        success(data.data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.toString())
      })
    })
  }

  /**
   * 直播详情-查询是否点赞接口
   * @param liveId
   * @param userId
   * @param deviceId
   * @returns
   */
  getLiveLike(liveId: string, userId: ValueType, deviceId: string | number) {
    return new Promise<boolean>((success, fail) => {
      HttpRequest.get<ResponseDTO<boolean>>(
        HttpUrlUtils.getLiveLikeUrl() + `?liveId=${liveId}&userId=${userId}&deviceId=${deviceId}`,
      ).then((data: ResponseDTO<boolean>) => {
        if (!data || !data.data) {
          fail("数据为空")
          return
        }
        if (data.code != 0) {
          fail(data.message)
          return
        }
        success(data.data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.toString())
      })
    })
  }

  /**
   * 获取直播预约状态
   * @param relationId
   * @param liveId
   * @returns
   */
  getLiveAppointmentStatus(relationId: string, liveId: string) {
    return new Promise<boolean>((success, fail) => {
      HttpRequest.get<ResponseDTO<boolean>>(
        HttpUrlUtils.getLiveAppointmentStatusUrl() + `?relationId=${relationId}&liveId=${liveId}`,
      ).then((data: ResponseDTO<boolean>) => {
        if (!data || !data.data) {
          fail("数据为空")
          return
        }
        if (data.code != 0) {
          fail(data.message)
          return
        }
        success(data.data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.toString())
      })
    })
  }

  /**
   * 直播预约/取消预约
   * @param relationId
   * @param mLiveId
   * @param isSubscribe
   * @returns
   */
  liveAppointment(relationId: string, liveId: string, isSubscribe: boolean) {
    let params: Record<string, string> = {};
    params['relationId'] = relationId
    params['liveId'] = liveId
    params['isSubscribe'] = `${isSubscribe}`
    return new Promise<ResponseDTO<string>>((success, fail) => {
      HttpRequest.post<ResponseDTO<string>>(
        HttpUrlUtils.getLiveAppointmentUrl(),
        params,
      ).then((data: ResponseDTO<string>) => {
        if (data.code != 0) {
          fail(data.message)
          ToastUtils.shortToast(data.message)
          return
        }
        if (data.code == 0) {
          const reserveModel = new ReserveItemBean(Number(liveId), relationId, isSubscribe)
          EmitterUtils.sendEvent(EmitterEventId.LIVE_ROOM_SUBSCRIBE, JSON.stringify(reserveModel))
        }
        success(data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.toString())
      })
    })
  }

  liveSendComment(comment: string, content: ContentDetailDTO) {
    let tourist: boolean = !HttpUtils.isLogin()
    let roomId: string = content.liveInfo.mlive.roomId as string
    let liveId: string = content.newsId + ''
    let mLiveId: string = content.liveInfo.mlive.mliveId as string

    let params: Record<string, string | number> = {};
    params["liveId"] = liveId
    params["mliveId"] = mLiveId
    params["roomId"] = roomId
    params["title"] = content.newsTitle
    params["text"] = comment

    if (tourist) {
      params["deviceId"] = HttpUtils.getDeviceId()
      params["senderUserName"] = SPHelper.default.getSync(SpConstants.TOURIST_NICK_NAME, "") as string
    } else {
      params["senderUserId"] = SPHelper.default.getSync(SpConstants.USER_ID, "") as string
      params["senderAvatarUrl"] = SPHelper.default.getSync(SpConstants.USER_HEAD_PHOTO_URL, "") as string
      params["senderUserName"] = SPHelper.default.getSync(SpConstants.USER_NAME, "") as string
    }
    params["customizeExpression"] = 0
    params["role"] = tourist ? "tourist" : "audience"

    let url = tourist ? HttpUrlUtils.getLiveTouristSendBarrageUrl() : HttpUrlUtils.getLiveSendBarrageUrl()
    return new Promise<ResponseDTO<Record<string, string | number>>>((success, fail) => {
      HttpRequest.post<ResponseDTO<Record<string, string | number>>>(url, params).then((data) => {
        success(data)
      }, (error: Error) => {
        fail(error.message)
        Logger.debug(TAG + ":error ", error.toString())
      })
    })
  }
}