mirror of
https://github.com/gosticks/PaperWM.git
synced 2026-08-16 06:00:22 +00:00
extension: wrap all init/enable/disable in try blocks
This commit is contained in:
+43
-51
@@ -69,17 +69,48 @@ function registerMinimapAction(name, handler) {
|
||||
{settings: settings, opensNavigator: true, opensMinimap: true});
|
||||
}
|
||||
|
||||
function run(method) {
|
||||
for (let module of modules) {
|
||||
// Bail if there's an error in our own modules
|
||||
if (!safeCall(module, method))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasUserConfigFile())
|
||||
safeCall(Extension.imports.user, method);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function safeCall(module, method) {
|
||||
try {
|
||||
utils.debug("#paperwm", `${method} ${module.__moduleName__}`);
|
||||
module[method] && module[method].call(module);
|
||||
return true;
|
||||
} catch(e) {
|
||||
utils.debug("#paperwm", `${method} failed`, e.message);
|
||||
utils.print_stacktrace(e);
|
||||
errorNotification(
|
||||
"PaperWM",
|
||||
`Error occured in ${module.__moduleName__} @${method}:\n\n${e.message}`,
|
||||
e.stack);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function init() {
|
||||
SESSIONID += "#";
|
||||
log(`init: ${SESSIONID}`);
|
||||
log(`#paperwm init: ${SESSIONID}`);
|
||||
|
||||
if(initRun) {
|
||||
log(`#startup Reinitialized against our will! Skip adding bindings again to not cause trouble.`);
|
||||
return;
|
||||
}
|
||||
initRun = true;
|
||||
|
||||
modules.forEach(m => m.init && m.init());
|
||||
initUserConfig();
|
||||
|
||||
if (run('init'))
|
||||
initRun = true;
|
||||
|
||||
paperSettings = convenience.getSettings();
|
||||
|
||||
@@ -183,30 +214,29 @@ function init() {
|
||||
metaWindow.make_fullscreen();
|
||||
}, Meta.KeyBindingFlags.PER_WINDOW);
|
||||
|
||||
initUserConfig();
|
||||
}
|
||||
|
||||
function enable() {
|
||||
// Only enable modules after disable have been run
|
||||
log(`#paerwm enable ${SESSIONID}`);
|
||||
|
||||
if (enabled) {
|
||||
log('enable called without calling disable');
|
||||
return;
|
||||
}
|
||||
log(`enabled ${SESSIONID}`);
|
||||
|
||||
modules.forEach(m => m.enable && m.enable());
|
||||
|
||||
if (run('enable'))
|
||||
enabled = true;
|
||||
}
|
||||
|
||||
function disable() {
|
||||
if (!enabled)
|
||||
log(`#paerwm enable ${SESSIONID}`);
|
||||
if (!enabled) {
|
||||
log('disable called without calling enable');
|
||||
return;
|
||||
log(`disable ${SESSIONID}`);
|
||||
}
|
||||
|
||||
modules.forEach(m => m.disable && m.disable());
|
||||
|
||||
enabled = false;
|
||||
if (run('disable'))
|
||||
enabled = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -244,33 +274,6 @@ function installConfig() {
|
||||
}
|
||||
}
|
||||
|
||||
function errorWrappedModule(module) {
|
||||
function safeCall(method) {
|
||||
try {
|
||||
utils.debug("#rc", `calling ${method}`);
|
||||
module[method].call(module);
|
||||
} catch(e) {
|
||||
utils.debug("#rc", `${method} failed`, e.message);
|
||||
utils.print_stacktrace(e);
|
||||
errorNotification("PaperWM",
|
||||
`Error occured in user.js@${method}:\n\n${e.message}`,
|
||||
e.stack
|
||||
);
|
||||
}
|
||||
}
|
||||
return {
|
||||
init: () => {
|
||||
safeCall("init");
|
||||
},
|
||||
enable: () => {
|
||||
safeCall("enable");
|
||||
},
|
||||
disable: () => {
|
||||
safeCall("disable");
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function initUserConfig() {
|
||||
const paperSettings = convenience.getSettings();
|
||||
|
||||
@@ -286,17 +289,6 @@ function initUserConfig() {
|
||||
|
||||
if (hasUserConfigFile()) {
|
||||
Extension.imports.searchPath.push(getConfigDir().get_path());
|
||||
try {
|
||||
utils.debug("#rc", "Loading config file");
|
||||
const userModule = errorWrappedModule(Extension.imports.user);
|
||||
modules.push(userModule);
|
||||
userModule.init();
|
||||
} catch(e) {
|
||||
utils.debug("#rc", "Loading config failed", e.message);
|
||||
utils.print_stacktrace(e);
|
||||
errorNotification("PaperWM", `Loading user.js failed:\n\n${e.message}`, e.stack);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ var workspaceManager = global.workspace_manager;
|
||||
var display = global.display;
|
||||
|
||||
var debug_all = false; // Turn off by default
|
||||
var debug_filter = {};
|
||||
var debug_filter = {'#paperwm': true, '#stacktrace': true};
|
||||
function debug() {
|
||||
let keyword = arguments[0];
|
||||
let filter = debug_filter[keyword];
|
||||
@@ -40,7 +40,7 @@ function print_stacktrace(error) {
|
||||
return frame !== "wrapper@resource:///org/gnome/gjs/modules/lang.js:178"
|
||||
});
|
||||
let args = [...arguments];
|
||||
args.splice(0, 1, "stacktrace:"+(args[0] ? args[0] : ""))
|
||||
args.splice(0, 1, "#stacktrace:"+(args[0] ? args[0] : ""));
|
||||
// Use non-breaking space to encode new lines (otherwise every frame is
|
||||
// prefixed by timestamp)
|
||||
let nl = " ";
|
||||
|
||||
Reference in New Issue
Block a user