@launchmenu/applet-session-manager
Version:
An applet to manage sessions
43 lines • 3.87 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupSessionDisposer = void 0;
const model_react_1 = require("model-react");
const _1 = require(".");
/**
* Sets up a session disposer that disposes non selected session that are on the homepage
* @param LM The LM instance
* @returns A function to dispose
*/
function setupSessionDisposer(LM) {
const autoClose = new model_react_1.DataCacher(h => LM.getSettingsManager().getSettingsContext(h).get(_1.settings).autoCloseEmpty.get(h));
const sessionManager = LM.getSessionManager();
const homeSessions = new model_react_1.DataCacher(h => sessionManager.getSessions(h).filter(session => session.isHome(h)));
let timeoutID = null;
const observer = new model_react_1.Observer(h => {
const ac = autoClose.get(h);
return {
autoClose: ac,
homeSessions: ac && homeSessions.get(h),
selected: sessionManager.getSelectedSession(h),
};
}).listen(({ autoClose, homeSessions, selected }) => {
if (autoClose && homeSessions) {
// Wait a second before removing old sessions to allow for the transition to finish
// TODO: find a proper way to deal with the transition, which doesn't depend on an arbitrary number
if (timeoutID)
clearTimeout(timeoutID);
timeoutID = setTimeout(() => {
// Remove all sessions that are empty and not selected
homeSessions
.filter(session => session != selected)
.forEach(session => {
sessionManager.removeSession(session);
session.destroy();
});
}, 1000);
}
});
return () => observer.destroy();
}
exports.setupSessionDisposer = setupSessionDisposer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBTZXNzaW9uRGlzcG9zZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0dXBTZXNzaW9uRGlzcG9zZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQWlEO0FBQ2pELHdCQUEyQjtBQUUzQjs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsRUFBYztJQUMvQyxNQUFNLFNBQVMsR0FBRyxJQUFJLHdCQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDakMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3BGLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDcEMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3JFLENBQUM7SUFFRixJQUFJLFNBQVMsR0FBMEIsSUFBSSxDQUFDO0lBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksc0JBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5QixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE9BQU87WUFDSCxTQUFTLEVBQUUsRUFBRTtZQUNiLFlBQVksRUFBRSxFQUFFLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7U0FDakQsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUMsRUFBRSxFQUFFO1FBQzlDLElBQUksU0FBUyxJQUFJLFlBQVksRUFBRTtZQUMzQixtRkFBbUY7WUFDbkYsbUdBQW1HO1lBQ25HLElBQUksU0FBUztnQkFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hCLHNEQUFzRDtnQkFDdEQsWUFBWTtxQkFDUCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDO3FCQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ2YsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDdEMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixDQUFDLENBQUMsQ0FBQztZQUNYLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNaO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBbkNELG9EQW1DQyJ9
;