videomail-client
Version:
A wicked npm package to record videos directly in the browser, wohooo!
145 lines (112 loc) • 3.12 kB
JavaScript
import util from 'util'
import Events from './../../../events'
import EventEmitter from './../../../util/eventEmitter'
import Browser from './../../../util/browser'
import Countdown from './recorder/countdown'
import PausedNote from './recorder/pausedNote'
import RecordNote from './recorder/recordNote'
import RecordTimer from './recorder/recordTimer'
import FacingMode from './recorder/facingMode'
const RecorderInsides = function (visuals, options) {
EventEmitter.call(this, options, 'RecorderInsides')
const self = this
const debug = options.debug
const recordNote = new RecordNote(visuals)
const recordTimer = new RecordTimer(visuals, recordNote, options)
const browser = new Browser(options)
let countdown
let pausedNote
let built
let facingMode
if (options.video.countdown) {
countdown = new Countdown(visuals, options)
}
if (options.video.facingModeButton && browser.isMobile()) {
facingMode = new FacingMode(visuals, options)
}
if (options.enablePause) {
pausedNote = new PausedNote(visuals, options)
}
function startRecording() {
recordTimer.start()
}
function resumeRecording() {
recordTimer.resume()
}
function stopRecording() {
recordTimer.stop()
}
function pauseRecording() {
if (self.isCountingDown()) {
countdown.pause()
} else {
recordTimer.pause()
}
}
function onResetting() {
self.hidePause()
self.hideCountdown()
recordTimer.stop()
facingMode && facingMode.hide()
}
function initEvents() {
debug('RecorderInsides: initEvents()')
self
.on(Events.USER_MEDIA_READY, function () {
facingMode && facingMode.show()
})
.on(Events.RECORDING, function () {
startRecording()
})
.on(Events.RESUMING, function () {
resumeRecording()
})
.on(Events.STOPPING, function () {
stopRecording()
})
.on(Events.PAUSED, function () {
pauseRecording()
})
.on(Events.RESETTING, onResetting)
.on(Events.HIDE, function () {
self.hideCountdown()
})
}
this.build = function () {
debug('RecorderInsides: build()')
countdown && countdown.build()
pausedNote && pausedNote.build()
facingMode && facingMode.build()
recordNote.build()
recordTimer.build()
!built && initEvents()
built = true
}
this.unload = function () {
countdown && countdown.unload()
built = false
}
this.showPause = function () {
pausedNote && pausedNote.show()
}
this.hidePause = function () {
pausedNote && pausedNote.hide()
}
this.hideCountdown = function () {
countdown && countdown.hide()
}
this.startCountdown = function (cb) {
countdown && countdown.start(cb)
}
this.resumeCountdown = function () {
countdown && countdown.resume()
}
this.isCountingDown = function () {
return countdown && countdown.isCountingDown()
}
this.checkTimer = function (intervalSum) {
recordTimer.check(intervalSum)
}
}
util.inherits(RecorderInsides, EventEmitter)
export default RecorderInsides