message-media.ts 1.9 KB
Newer Older
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
1 2 3 4 5 6 7 8
/**
 *
 * wechaty: Wechat for Bot. and for human who talk to bot/robot
 *
 * Licenst: ISC
 * https://github.com/zixia/wechaty
 *
 */
9
// const co = require('co')
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
10

11 12 13 14 15
import Config   from './config'
import Message  from './message'
import UtilLib  from './util-lib'

import log      from './brolog-env'
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
16

17 18
import { Bridge }   from './puppet-web/'

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
19
class MediaMessage extends Message {
20 21
  private bridge: Bridge

Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
22 23
  constructor(rawObj) {
    super(rawObj)
24 25
    this.bridge = Config.puppetInstance()
                        .bridge
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
26
  }
27
  public async ready(): Promise<MediaMessage> {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
28 29 30
    log.silly('MediaMessage', 'ready()')

    const parentReady = super.ready.bind(this)
31 32 33 34
    // return co.call(this, function* () {
    try {
      await parentReady()
      const url = await this.getMsgImg(this.id)
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
35 36 37
      this.obj.url = url

      return this // IMPORTANT!
38
    } catch (e) {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
39 40
      log.warn('MediaMessage', 'ready() exception: %s', e.message)
      throw e
41 42 43 44 45 46 47 48 49 50 51 52
    }
    // return co.call(this, function* () {
    //   yield parentReady()
    //   const url = yield this.getMsgImg(this.id)
    //   this.obj.url = url

    //   return this // IMPORTANT!
    // })
    // .catch(e => {
    //   log.warn('MediaMessage', 'ready() exception: %s', e.message)
    //   throw e
    // })
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
53
  }
54
  private getMsgImg(id: string): Promise<string> {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
55 56 57 58 59 60 61
    return this.bridge.getMsgImg(id)
    .catch(e => {
      log.warn('MediaMessage', 'getMsgImg(%d) exception: %s', id, e.message)
      throw e
    })
  }

62
  public readyStream(): Promise<NodeJS.ReadableStream> {
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
63 64
    return this.ready()
    .then(() => {
65 66
      return Config.puppetInstance()
                    .browser.checkSession()
Huan (李卓桓)'s avatar
Huan (李卓桓) 已提交
67 68 69 70 71 72 73 74 75 76 77
    })
    .then(cookies => {
      return UtilLib.downloadStream(this.obj.url, cookies)
    })
    .catch(e => {
      log.warn('MediaMessage', 'stream() exception: %s', e.message)
      throw e
    })
  }
}

78 79
// module.exports = MediaMessage.default = MediaMessage.MediaMessage = MediaMessage
export default MediaMessage