all files / sync/gpii/node_modules/xrandr/ xrandr_bridge.js

90.2% Statements 46/51
50% Branches 4/8
100% Functions 7/7
90.2% Lines 46/51
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124                                                                11× 11× 11×     11×                                                                                        
/*
 * GPII Node.js Xrandr Bridge
 *
 * Copyright 2013 Emergya
 *
 * Licensed under the New BSD license. You may not use this file except in
 * compliance with this License.
 *
 * You may obtain a copy of the License at
 * https://github.com/GPII/linux/blob/master/LICENSE.txt
 *
 * The research leading to these results has received funding from the European Union's
 * Seventh Framework Programme (FP7/2007-2013)
 * under grant agreement no. 289016.
 */
 
 
"use strict";
 
var fluid = require("universal");
var gpii = fluid.registerNamespace("gpii");
var xrandr = require("./nodexrandr/build/Release/nodexrandr.node");
 
fluid.registerNamespace("gpii.xrandr");
 
fluid.defaults("gpii.xrandr.getScreenResolution", {
    gradeNames: "fluid.function",
    argumentMap: {
    }
});
 
fluid.defaults("gpii.xrandr.setScreenResolution", {
    gradeNames: "fluid.function",
    argumentMap: {
        value: 0
    }
});
 
gpii.xrandr.getScreenResolution = function () {
    var displayInfo = xrandr.getDisplays();
    var connectedDisplay = fluid.find_if(displayInfo, function (display) {
        return display.status === "connected";
    }, displayInfo[0]);
 
    return {
        width: connectedDisplay.resolution.width,
        height: connectedDisplay.resolution.height
    };
};
 
gpii.xrandr.setScreenResolution = function (value) {
    var current = gpii.xrandr.getScreenResolution();
    Eif (JSON.stringify(value) === JSON.stringify(current)) {
        return true;
    } else {
        return xrandr.setScreenResolution(value.width, value.height);
    }
};
 
gpii.xrandr.allSettings = {
    "screen-resolution": {
        get: "gpii.xrandr.getScreenResolution",
        set: "gpii.xrandr.setScreenResolution"
    }
};
 
gpii.xrandr.getImpl = function (settingsRequest) {
    settingsRequest = settingsRequest || gpii.xrandr.allSettings;
    var settings = fluid.transform(settingsRequest, function (value, key) {
        var funcEntry = gpii.xrandr.allSettings[key];
        Eif (funcEntry) {
            return fluid.invokeGlobalFunction(funcEntry.get);
        } else {
            fluid.fail("Invalid key to Xrandr settings handler - " +
                key + " - valid choices are " + JSON.stringify(fluid.keys(gpii.xrandr.allSettings)));
        }
    });
    return settings;
};
 
gpii.xrandr.get = function (settingsarray) {
    var app = fluid.copy(settingsarray);
    for (var appId in app) {
        for (var j = 0; j < app[appId].length; j++) {
            var settings = gpii.xrandr.getImpl(app[appId][j].settings);
 
            var noOptions = { settings: settings };
            app[appId][j] = noOptions;
        }
    }
    return app;
};
 
gpii.xrandr.set = function (settingsarray) {
    var app = fluid.copy(settingsarray);
    for (var appId in app) {
        for (var j = 0; j < app[appId].length; j++) {
            var settings = app[appId][j].settings;
 
            for (var settingKey in settings) {
                var value = settings[settingKey];
 
                var oldValue;
                Eif (settingKey === "screen-resolution") {
                    oldValue = gpii.xrandr.getScreenResolution();
                    gpii.xrandr.setScreenResolution(value);
                } else {
                    var err = "Invalid key: " + settingKey;
                    fluid.fail(err);
                    fluid.log(err);
                }
 
                settings[settingKey] = {
                    "oldValue": oldValue,
                    "newValue": value
                };
            }
            var noOptions = { settings: settings};
            app[appId][j] = noOptions;
        }
    }
    return app;
};