Merge pull request #421 from transloadit/feature/is-supproted

webcam,dashboard: Add `isSupported()` API for providers
This commit is contained in:
Artur Paikin 2017-11-13 15:11:26 -05:00 committed by GitHub
commit c2accaa0fe
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 13 deletions

View file

@ -311,8 +311,17 @@ module.exports = class DashboardUI extends Plugin {
})
}
const isSupported = (target) => {
const plugin = this.core.getPlugin(target.id)
// If the plugin does not provide a `supported` check, assume the plugin works everywhere.
if (typeof plugin.isSupported !== 'function') {
return true
}
return plugin.isSupported()
}
const acquirers = pluginState.targets
.filter(target => target.type === 'acquirer')
.filter(target => target.type === 'acquirer' && isSupported(target))
.map(attachRenderFunctionToTarget)
const progressindicators = pluginState.targets

View file

@ -16,7 +16,7 @@ function getMediaDevices () {
return navigator.mediaDevices
}
let getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia
const getUserMedia = navigator.mozGetUserMedia || navigator.webkitGetUserMedia
if (!getUserMedia) {
return null
}
@ -94,25 +94,34 @@ module.exports = class Webcam extends Plugin {
}
}
start () {
if (!this.mediaDevices) {
return Promise.reject(new Error('Webcam access not supported'))
}
this.webcamActive = true
isSupported () {
return !!this.mediaDevices
}
getConstraints () {
const acceptsAudio = this.opts.modes.indexOf('video-audio') !== -1 ||
this.opts.modes.indexOf('audio-only') !== -1
const acceptsVideo = this.opts.modes.indexOf('video-audio') !== -1 ||
this.opts.modes.indexOf('video-only') !== -1 ||
this.opts.modes.indexOf('picture') !== -1
return {
audio: acceptsAudio,
video: acceptsVideo
}
}
start () {
if (!this.isSupported()) {
return Promise.reject(new Error('Webcam access not supported'))
}
this.webcamActive = true
const constraints = this.getConstraints()
// ask user for access to their camera
return this.mediaDevices
.getUserMedia({
audio: acceptsAudio,
video: acceptsVideo
})
return this.mediaDevices.getUserMedia(constraints)
.then((stream) => {
this.stream = stream
this.streamSrc = URL.createObjectURL(this.stream)