UNPKG

@launchmenu/applet-session-manager

Version:
145 lines 13.1 kB
"use strict"; 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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