@launchmenu/applet-session-manager
Version:
An applet to manage sessions
145 lines • 13.1 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.settings = exports.info = void 0;
const core_1 = require("@launchmenu/core");
const model_react_1 = require("model-react");
const SessionData_1 = require("./SessionData");
const setupSessionDisposer_1 = require("./setupSessionDisposer");
exports.info = {
name: "Session manager",
description: "An applet to manage all sessions within LaunchMenu",
version: "0.0.0",
icon: "session",
};
exports.settings = core_1.createSettings({
version: "0.0.0",
settings: () => core_1.createSettingsFolder({
...exports.info,
children: {
autoCloseEmpty: core_1.createBooleanSetting({
name: "Auto close empty sessions",
init: true,
}),
controls: core_1.createSettingsFolder({
name: "Controls",
children: {
openMenu: core_1.createKeyPatternSetting({
name: "Open session switcher",
init: new core_1.KeyPattern("ctrl+w"),
}),
newSession: core_1.createKeyPatternSetting({
name: "Create a new session",
init: new core_1.KeyPattern("ctrl+n"),
}),
toggleSession: core_1.createKeyPatternSetting({
name: "Toggle between sessions",
init: new core_1.KeyPattern("ctrl+r"),
}),
goHome: core_1.createKeyPatternSetting({
name: "Go home (clear session)",
init: new core_1.KeyPattern([
{ pattern: "ctrl+h", type: "down" },
{ pattern: "shift+esc", type: "down" },
]),
}),
},
}),
},
}),
});
exports.default = core_1.declare({
info: exports.info,
settings: exports.settings,
coreCategory: core_1.CoreAppletType.SESSIONS,
init: ({ LM }) => {
const sessionManager = LM.getSessionManager();
const disposeSessionDisposer = setupSessionDisposer_1.setupSessionDisposer(LM);
/** Keep track of the sessions with some extra interface data the user can attach */
const sessionsData = new model_react_1.DataCacher((h, curSessionData = []) => {
// Find the currently highest session ID (in name)
let highestSessionID = curSessionData.reduce((cur, sessionData) => {
const match = sessionData.name.get().match(/session-(\d+)/);
return match ? Math.max(Number(match[1]), cur) : cur;
}, 0);
// Sort the new sessions to be in the same order as the old
const newSessions = [...sessionManager.getSessions(h)];
newSessions.sort((a, b) => {
const indexA = curSessionData.findIndex(({ session }) => session == a);
const indexB = curSessionData.findIndex(({ session }) => session == b);
if (indexA == -1)
return 1;
if (indexB == -1)
return -1;
return indexA - indexB;
});
// Retrieve the updated session data
return newSessions.map(newSession => {
// If the session already exists, return it
const current = curSessionData.find(({ session }) => session == newSession);
if (current)
return current;
// Create new session data for new sessions
return new SessionData_1.SessionData(newSession, `session-${++highestSessionID}`);
});
});
// Setup the menu controls
const sessionsControlsCategory = core_1.createStandardCategory({
name: "Session controls",
});
const addSessionItem = core_1.createStandardMenuItem({
name: "Add session",
category: sessionsControlsCategory,
shortcut: (context, h) => context.settings.get(exports.settings).controls.newSession.get(h),
onExecute: () => {
const session = sessionManager.addSession();
},
});
const toggleSessionsItem = core_1.createStandardMenuItem({
name: "Toggle sessions",
category: sessionsControlsCategory,
shortcut: (context, h) => context.settings.get(exports.settings).controls.toggleSession.get(h),
onExecute: () => {
const sessions = sessionManager.getSessions();
const prevSession = sessions[sessions.length - 2];
if (prevSession)
sessionManager.selectSession(prevSession);
},
});
// Collect the items for in the menu
const getSessionMenuItems = (h) => [
...sessionsData.get(h).map(({ sessionInterface }) => sessionInterface),
addSessionItem,
toggleSessionsItem,
];
const switchSessionsName = "Switch session";
return {
open({ context, onClose }) {
context.open(new core_1.UILayer(() => ({
menu: new core_1.ProxiedMenu(context, getSessionMenuItems),
onClose,
}), { path: switchSessionsName }));
},
globalContextMenuBindings: [
core_1.createGlobalContextBinding({
priority: [core_1.Priority.HIGH, 45],
item: core_1.createStandardMenuItem({
name: "Go home",
icon: "home",
onExecute: ({ context }) => { var _a; return (_a = context.session) === null || _a === void 0 ? void 0 : _a.goHome(); },
shortcut: (context, h) => context.settings.get(exports.settings).controls.goHome.get(h),
}),
}),
core_1.createGlobalContextBinding({
priority: [core_1.Priority.LOW, 49],
item: core_1.createContextFolderMenuItem({
name: switchSessionsName,
children: getSessionMenuItems,
shortcut: (context, h) => context.settings.get(exports.settings).controls.openMenu.get(h),
}),
}),
],
onDispose: () => disposeSessionDisposer(),
};
},
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQWUwQjtBQUMxQiw2Q0FBa0Q7QUFDbEQsK0NBQTBDO0FBQzFDLGlFQUE0RDtBQUUvQyxRQUFBLElBQUksR0FBRztJQUNoQixJQUFJLEVBQUUsaUJBQWlCO0lBQ3ZCLFdBQVcsRUFBRSxvREFBb0Q7SUFDakUsT0FBTyxFQUFFLE9BQU87SUFDaEIsSUFBSSxFQUFFLFNBQVM7Q0FDVCxDQUFDO0FBRUUsUUFBQSxRQUFRLEdBQUcscUJBQWMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsT0FBTztJQUNoQixRQUFRLEVBQUUsR0FBRyxFQUFFLENBQ1gsMkJBQW9CLENBQUM7UUFDakIsR0FBRyxZQUFJO1FBQ1AsUUFBUSxFQUFFO1lBQ04sY0FBYyxFQUFFLDJCQUFvQixDQUFDO2dCQUNqQyxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxJQUFJLEVBQUUsSUFBSTthQUNiLENBQUM7WUFDRixRQUFRLEVBQUUsMkJBQW9CLENBQUM7Z0JBQzNCLElBQUksRUFBRSxVQUFVO2dCQUNoQixRQUFRLEVBQUU7b0JBQ04sUUFBUSxFQUFFLDhCQUF1QixDQUFDO3dCQUM5QixJQUFJLEVBQUUsdUJBQXVCO3dCQUM3QixJQUFJLEVBQUUsSUFBSSxpQkFBVSxDQUFDLFFBQVEsQ0FBQztxQkFDakMsQ0FBQztvQkFDRixVQUFVLEVBQUUsOEJBQXVCLENBQUM7d0JBQ2hDLElBQUksRUFBRSxzQkFBc0I7d0JBQzVCLElBQUksRUFBRSxJQUFJLGlCQUFVLENBQUMsUUFBUSxDQUFDO3FCQUNqQyxDQUFDO29CQUNGLGFBQWEsRUFBRSw4QkFBdUIsQ0FBQzt3QkFDbkMsSUFBSSxFQUFFLHlCQUF5Qjt3QkFDL0IsSUFBSSxFQUFFLElBQUksaUJBQVUsQ0FBQyxRQUFRLENBQUM7cUJBQ2pDLENBQUM7b0JBQ0YsTUFBTSxFQUFFLDhCQUF1QixDQUFDO3dC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
;