blob: 5f20e1c3e75b40c062547e77deacb1f9b840f8b0 [file] [log] [blame]
var util = require('util')
var syrup = require('stf-syrup')
var EventEmitter = require('eventemitter3').EventEmitter
var logger = require('../../../../util/logger')
var streamutil = require('../../../../util/streamutil')
module.exports = syrup.serial()
.dependency(require('../../support/adb'))
.dependency(require('../../resources/minicap'))
.dependency(require('../service'))
.dependency(require('../screen/options'))
.define(function(options, adb, minicap, service, screenOptions) {
var log = logger.createLogger('device:plugins:display')
function Display(id, properties) {
this.id = id
this.properties = properties
}
util.inherits(Display, EventEmitter)
Display.prototype.updateRotation = function(newRotation) {
log.info('Rotation changed to %d', newRotation)
this.properties.rotation = newRotation
this.emit('rotationChange', newRotation)
}
function infoFromMinicap(id) {
return minicap.run(util.format('-d %d -i', id))
.then(streamutil.readAll)
.then(function(out) {
var match
if ((match = /^ERROR: (.*)$/.exec(out))) {
throw new Error(match[1])
}
try {
return JSON.parse(out)
}
catch (e) {
throw new Error(out.toString())
}
})
}
function infoFromService(id) {
return service.getDisplay(id)
}
function readInfo(id) {
log.info('Reading display info')
return infoFromService(id)
.catch(function() {
return infoFromMinicap(id)
})
.then(function(properties) {
properties.url = screenOptions.publicUrl
return new Display(id, properties)
})
}
return readInfo(0).then(function(display) {
service.on('rotationChange', function(data) {
display.updateRotation(data.rotation)
})
return display
})
})