mirror of
https://github.com/roytam1/basilisk55.git
synced 2026-05-26 15:02:46 +00:00
139 lines
3.6 KiB
JavaScript
139 lines
3.6 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
const {
|
|
ADD_DEVICE,
|
|
ADD_DEVICE_TYPE,
|
|
LOAD_DEVICE_LIST_START,
|
|
LOAD_DEVICE_LIST_ERROR,
|
|
LOAD_DEVICE_LIST_END,
|
|
UPDATE_DEVICE_DISPLAYED,
|
|
UPDATE_DEVICE_MODAL_OPEN,
|
|
} = require("./index");
|
|
|
|
const { getDevices } = require("devtools/client/shared/devices");
|
|
|
|
const Services = require("Services");
|
|
const DISPLAYED_DEVICES_PREF = "devtools.responsive.html.displayedDeviceList";
|
|
|
|
/**
|
|
* Returns an object containing the user preference of displayed devices.
|
|
*
|
|
* @return {Object} containing two Sets:
|
|
* - added: Names of the devices that were explicitly enabled by the user
|
|
* - removed: Names of the devices that were explicitly removed by the user
|
|
*/
|
|
function loadPreferredDevices() {
|
|
let preferredDevices = {
|
|
"added": new Set(),
|
|
"removed": new Set(),
|
|
};
|
|
|
|
if (Services.prefs.prefHasUserValue(DISPLAYED_DEVICES_PREF)) {
|
|
try {
|
|
let savedData = Services.prefs.getCharPref(DISPLAYED_DEVICES_PREF);
|
|
savedData = JSON.parse(savedData);
|
|
if (savedData.added && savedData.removed) {
|
|
preferredDevices.added = new Set(savedData.added);
|
|
preferredDevices.removed = new Set(savedData.removed);
|
|
}
|
|
} catch (e) {
|
|
console.error(e);
|
|
}
|
|
}
|
|
|
|
return preferredDevices;
|
|
}
|
|
|
|
/**
|
|
* Update the displayed device list preference with the given device list.
|
|
*
|
|
* @param {Object} containing two Sets:
|
|
* - added: Names of the devices that were explicitly enabled by the user
|
|
* - removed: Names of the devices that were explicitly removed by the user
|
|
*/
|
|
function updatePreferredDevices(devices) {
|
|
let devicesToSave = {
|
|
added: Array.from(devices.added),
|
|
removed: Array.from(devices.removed),
|
|
};
|
|
devicesToSave = JSON.stringify(devicesToSave);
|
|
Services.prefs.setCharPref(DISPLAYED_DEVICES_PREF, devicesToSave);
|
|
}
|
|
|
|
module.exports = {
|
|
|
|
// This function is only exported for testing purposes
|
|
_loadPreferredDevices: loadPreferredDevices,
|
|
|
|
updatePreferredDevices: updatePreferredDevices,
|
|
|
|
addDevice(device, deviceType) {
|
|
return {
|
|
type: ADD_DEVICE,
|
|
device,
|
|
deviceType,
|
|
};
|
|
},
|
|
|
|
addDeviceType(deviceType) {
|
|
return {
|
|
type: ADD_DEVICE_TYPE,
|
|
deviceType,
|
|
};
|
|
},
|
|
|
|
updateDeviceDisplayed(device, deviceType, displayed) {
|
|
return {
|
|
type: UPDATE_DEVICE_DISPLAYED,
|
|
device,
|
|
deviceType,
|
|
displayed,
|
|
};
|
|
},
|
|
|
|
loadDevices() {
|
|
return function* (dispatch, getState) {
|
|
yield dispatch({ type: LOAD_DEVICE_LIST_START });
|
|
let preferredDevices = loadPreferredDevices();
|
|
let devices;
|
|
|
|
try {
|
|
devices = yield getDevices();
|
|
} catch (e) {
|
|
console.error("Could not load device list: " + e);
|
|
dispatch({ type: LOAD_DEVICE_LIST_ERROR });
|
|
return;
|
|
}
|
|
|
|
for (let type of devices.TYPES) {
|
|
dispatch(module.exports.addDeviceType(type));
|
|
for (let device of devices[type]) {
|
|
if (device.os == "fxos") {
|
|
continue;
|
|
}
|
|
|
|
let newDevice = Object.assign({}, device, {
|
|
displayed: preferredDevices.added.has(device.name) ||
|
|
(device.featured && !(preferredDevices.removed.has(device.name))),
|
|
});
|
|
|
|
dispatch(module.exports.addDevice(newDevice, type));
|
|
}
|
|
}
|
|
dispatch({ type: LOAD_DEVICE_LIST_END });
|
|
};
|
|
},
|
|
|
|
updateDeviceModalOpen(isOpen) {
|
|
return {
|
|
type: UPDATE_DEVICE_MODAL_OPEN,
|
|
isOpen,
|
|
};
|
|
},
|
|
|
|
};
|