mirror of
https://github.com/openstf/stf
synced 2025-10-04 18:29:17 +02:00
71 lines
1.9 KiB
JavaScript
71 lines
1.9 KiB
JavaScript
var util = require('util')
|
|
|
|
var syrup = require('stf-syrup')
|
|
var EventEmitter = require('eventemitter3')
|
|
|
|
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
|
|
})
|
|
})
|