prefs.js (3572B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 const { 8 ENABLE_REQUEST_FILTER_TYPE_ONLY, 9 RESET_COLUMNS, 10 TOGGLE_COLUMN, 11 TOGGLE_REQUEST_FILTER_TYPE, 12 ENABLE_PERSISTENT_LOGS, 13 SET_REQUEST_FILTER_TEXT, 14 DISABLE_BROWSER_CACHE, 15 SET_COLUMNS_WIDTH, 16 SET_DEFAULT_RAW_RESPONSE, 17 WS_TOGGLE_COLUMN, 18 WS_RESET_COLUMNS, 19 } = require("resource://devtools/client/netmonitor/src/constants.js"); 20 21 /** 22 * Update the relevant prefs when: 23 * - a column has been toggled 24 * - a filter type has been set 25 */ 26 function prefsMiddleware(store) { 27 return next => action => { 28 const res = next(action); 29 switch (action.type) { 30 case ENABLE_REQUEST_FILTER_TYPE_ONLY: 31 case TOGGLE_REQUEST_FILTER_TYPE: { 32 const filters = Object.entries( 33 store.getState().filters.requestFilterTypes 34 ) 35 .filter(([, check]) => check) 36 .map(([type]) => type); 37 Services.prefs.setCharPref( 38 "devtools.netmonitor.filters", 39 JSON.stringify(filters) 40 ); 41 break; 42 } 43 case SET_REQUEST_FILTER_TEXT: 44 Services.prefs.setCharPref( 45 "devtools.netmonitor.requestfilter", 46 store.getState().filters.requestFilterText 47 ); 48 break; 49 case ENABLE_PERSISTENT_LOGS: { 50 const enabled = store.getState().ui.persistentLogsEnabled; 51 Services.prefs.setBoolPref("devtools.netmonitor.persistlog", enabled); 52 break; 53 } 54 case DISABLE_BROWSER_CACHE: 55 Services.prefs.setBoolPref( 56 "devtools.cache.disabled", 57 store.getState().ui.browserCacheDisabled 58 ); 59 break; 60 case TOGGLE_COLUMN: 61 persistVisibleColumns(store.getState()); 62 break; 63 case RESET_COLUMNS: 64 persistVisibleColumns(store.getState()); 65 persistColumnsData(store.getState()); 66 break; 67 case SET_COLUMNS_WIDTH: 68 persistColumnsData(store.getState()); 69 break; 70 case SET_DEFAULT_RAW_RESPONSE: 71 Services.prefs.setBoolPref( 72 "devtools.netmonitor.ui.default-raw-response", 73 store.getState().ui.defaultRawResponse 74 ); 75 break; 76 case WS_TOGGLE_COLUMN: 77 case WS_RESET_COLUMNS: 78 persistVisibleWebSocketsColumns(store.getState()); 79 break; 80 } 81 return res; 82 }; 83 } 84 85 /** 86 * Store list of visible columns into preferences. 87 */ 88 function persistVisibleColumns(state) { 89 const visibleColumns = []; 90 const { columns } = state.ui; 91 for (const column in columns) { 92 if (columns[column]) { 93 visibleColumns.push(column); 94 } 95 } 96 97 Services.prefs.setCharPref( 98 "devtools.netmonitor.visibleColumns", 99 JSON.stringify(visibleColumns) 100 ); 101 } 102 103 /** 104 * Store list of visible columns into preferences. 105 */ 106 function persistVisibleWebSocketsColumns(state) { 107 const visibleColumns = []; 108 const { columns } = state.messages; 109 for (const column in columns) { 110 if (columns[column]) { 111 visibleColumns.push(column); 112 } 113 } 114 115 Services.prefs.setCharPref( 116 "devtools.netmonitor.msg.visibleColumns", 117 JSON.stringify(visibleColumns) 118 ); 119 } 120 121 /** 122 * Store columns data (width, min-width, etc.) into preferences. 123 */ 124 function persistColumnsData(state) { 125 const columnsData = [...state.ui.columnsData.values()]; 126 Services.prefs.setCharPref( 127 "devtools.netmonitor.columnsData", 128 JSON.stringify(columnsData) 129 ); 130 } 131 132 module.exports = prefsMiddleware;