UNPKG

matrix-react-sdk

Version:
84 lines (78 loc) 10.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DRAFT_LAST_CLEANUP_KEY = exports.DRAFT_CLEANUP_PERIOD = void 0; exports.cleanUpDraftsIfRequired = cleanUpDraftsIfRequired; var _logger = require("matrix-js-sdk/src/logger"); var _MatrixClientPeg = require("./MatrixClientPeg"); var _SendMessageComposer = require("./components/views/rooms/SendMessageComposer"); var _MessageComposer = require("./components/views/rooms/MessageComposer"); /* Copyright 2024 New Vector Ltd. Copyright 2024 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ // The key used to persist the the timestamp we last cleaned up drafts const DRAFT_LAST_CLEANUP_KEY = exports.DRAFT_LAST_CLEANUP_KEY = "mx_draft_cleanup"; // The period of time we wait between cleaning drafts const DRAFT_CLEANUP_PERIOD = exports.DRAFT_CLEANUP_PERIOD = 1000 * 60 * 60 * 24 * 30; /** * Checks if `DRAFT_CLEANUP_PERIOD` has expired, if so, deletes any stord editor drafts that exist for rooms that are not in the known list. */ function cleanUpDraftsIfRequired() { if (!shouldCleanupDrafts()) { return; } _logger.logger.debug(`Cleaning up editor drafts...`); cleaupDrafts(); try { localStorage.setItem(DRAFT_LAST_CLEANUP_KEY, String(Date.now())); } catch (error) { _logger.logger.error("Failed to persist draft cleanup key", error); } } /** * * @returns {bool} True if the timestamp has not been persisted or the `DRAFT_CLEANUP_PERIOD` has expired. */ function shouldCleanupDrafts() { try { const lastCleanupTimestamp = localStorage.getItem(DRAFT_LAST_CLEANUP_KEY); if (!lastCleanupTimestamp) { return true; } const parsedTimestamp = Number.parseInt(lastCleanupTimestamp || "", 10); if (!Number.isInteger(parsedTimestamp)) { return true; } return Date.now() > parsedTimestamp + DRAFT_CLEANUP_PERIOD; } catch (error) { return true; } } /** * Clear all drafts for the CIDER and WYSIWYG editors if the room does not exist in the known rooms. */ function cleaupDrafts() { for (let i = 0; i < localStorage.length; i++) { const keyName = localStorage.key(i); if (!keyName) continue; let roomId = undefined; if (keyName.startsWith(_SendMessageComposer.EDITOR_STATE_STORAGE_PREFIX)) { roomId = keyName.slice(_SendMessageComposer.EDITOR_STATE_STORAGE_PREFIX.length).split("_$")[0]; } if (keyName.startsWith(_MessageComposer.WYSIWYG_EDITOR_STATE_STORAGE_PREFIX)) { roomId = keyName.slice(_MessageComposer.WYSIWYG_EDITOR_STATE_STORAGE_PREFIX.length).split("_$")[0]; } if (!roomId) continue; // Remove the prefix and the optional event id suffix to leave the room id const room = _MatrixClientPeg.MatrixClientPeg.safeGet().getRoom(roomId); if (!room) { _logger.logger.debug(`Removing draft for unknown room with key ${keyName}`); localStorage.removeItem(keyName); } } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwicmVxdWlyZSIsIl9NYXRyaXhDbGllbnRQZWciLCJfU2VuZE1lc3NhZ2VDb21wb3NlciIsIl9NZXNzYWdlQ29tcG9zZXIiLCJEUkFGVF9MQVNUX0NMRUFOVVBfS0VZIiwiZXhwb3J0cyIsIkRSQUZUX0NMRUFOVVBfUEVSSU9EIiwiY2xlYW5VcERyYWZ0c0lmUmVxdWlyZWQiLCJzaG91bGRDbGVhbnVwRHJhZnRzIiwibG9nZ2VyIiwiZGVidWciLCJjbGVhdXBEcmFmdHMiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiU3RyaW5nIiwiRGF0ZSIsIm5vdyIsImVycm9yIiwibGFzdENsZWFudXBUaW1lc3RhbXAiLCJnZXRJdGVtIiwicGFyc2VkVGltZXN0YW1wIiwiTnVtYmVyIiwicGFyc2VJbnQiLCJpc0ludGVnZXIiLCJpIiwibGVuZ3RoIiwia2V5TmFtZSIsImtleSIsInJvb21JZCIsInVuZGVmaW5lZCIsInN0YXJ0c1dpdGgiLCJFRElUT1JfU1RBVEVfU1RPUkFHRV9QUkVGSVgiLCJzbGljZSIsInNwbGl0IiwiV1lTSVdZR19FRElUT1JfU1RBVEVfU1RPUkFHRV9QUkVGSVgiLCJyb29tIiwiTWF0cml4Q2xpZW50UGVnIiwic2FmZUdldCIsImdldFJvb20iLCJyZW1vdmVJdGVtIl0sInNvdXJjZXMiOlsiLi4vc3JjL0RyYWZ0Q2xlYW5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyNCBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCB7IE1hdHJpeENsaWVudFBlZyB9IGZyb20gXCIuL01hdHJpeENsaWVudFBlZ1wiO1xuaW1wb3J0IHsgRURJVE9SX1NUQVRFX1NUT1JBR0VfUFJFRklYIH0gZnJvbSBcIi4vY29tcG9uZW50cy92aWV3cy9yb29tcy9TZW5kTWVzc2FnZUNvbXBvc2VyXCI7XG5pbXBvcnQgeyBXWVNJV1lHX0VESVRPUl9TVEFURV9TVE9SQUdFX1BSRUZJWCB9IGZyb20gXCIuL2NvbXBvbmVudHMvdmlld3Mvcm9vbXMvTWVzc2FnZUNvbXBvc2VyXCI7XG5cbi8vIFRoZSBrZXkgdXNlZCB0byBwZXJzaXN0IHRoZSB0aGUgdGltZXN0YW1wIHdlIGxhc3QgY2xlYW5lZCB1cCBkcmFmdHNcbmV4cG9ydCBjb25zdCBEUkFGVF9MQVNUX0NMRUFOVVBfS0VZID0gXCJteF9kcmFmdF9jbGVhbnVwXCI7XG4vLyBUaGUgcGVyaW9kIG9mIHRpbWUgd2Ugd2FpdCBiZXR3ZWVuIGNsZWFuaW5nIGRyYWZ0c1xuZXhwb3J0IGNvbnN0IERSQUZUX0NMRUFOVVBfUEVSSU9EID0gMTAwMCAqIDYwICogNjAgKiAyNCAqIDMwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgRFJBRlRfQ0xFQU5VUF9QRVJJT0RgIGhhcyBleHBpcmVkLCBpZiBzbywgZGVsZXRlcyBhbnkgc3RvcmQgZWRpdG9yIGRyYWZ0cyB0aGF0IGV4aXN0IGZvciByb29tcyB0aGF0IGFyZSBub3QgaW4gdGhlIGtub3duIGxpc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblVwRHJhZnRzSWZSZXF1aXJlZCgpOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZENsZWFudXBEcmFmdHMoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvZ2dlci5kZWJ1ZyhgQ2xlYW5pbmcgdXAgZWRpdG9yIGRyYWZ0cy4uLmApO1xuICAgIGNsZWF1cERyYWZ0cygpO1xuICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKERSQUZUX0xBU1RfQ0xFQU5VUF9LRVksIFN0cmluZyhEYXRlLm5vdygpKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKFwiRmFpbGVkIHRvIHBlcnNpc3QgZHJhZnQgY2xlYW51cCBrZXlcIiwgZXJyb3IpO1xuICAgIH1cbn1cblxuLyoqXG4gKlxuICogQHJldHVybnMge2Jvb2x9IFRydWUgaWYgdGhlIHRpbWVzdGFtcCBoYXMgbm90IGJlZW4gcGVyc2lzdGVkIG9yIHRoZSBgRFJBRlRfQ0xFQU5VUF9QRVJJT0RgIGhhcyBleHBpcmVkLlxuICovXG5mdW5jdGlvbiBzaG91bGRDbGVhbnVwRHJhZnRzKCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxhc3RDbGVhbnVwVGltZXN0YW1wID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oRFJBRlRfTEFTVF9DTEVBTlVQX0tFWSk7XG4gICAgICAgIGlmICghbGFzdENsZWFudXBUaW1lc3RhbXApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFRpbWVzdGFtcCA9IE51bWJlci5wYXJzZUludChsYXN0Q2xlYW51cFRpbWVzdGFtcCB8fCBcIlwiLCAxMCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYXJzZWRUaW1lc3RhbXApKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSA+IHBhcnNlZFRpbWVzdGFtcCArIERSQUZUX0NMRUFOVVBfUEVSSU9EO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDbGVhciBhbGwgZHJhZnRzIGZvciB0aGUgQ0lERVIgYW5kIFdZU0lXWUcgZWRpdG9ycyBpZiB0aGUgcm9vbSBkb2VzIG5vdCBleGlzdCBpbiB0aGUga25vd24gcm9vbXMuXG4gKi9cbmZ1bmN0aW9uIGNsZWF1cERyYWZ0cygpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvY2FsU3RvcmFnZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXlOYW1lID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgaWYgKCFrZXlOYW1lKSBjb250aW51ZTtcbiAgICAgICAgbGV0IHJvb21JZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoa2V5TmFtZS5zdGFydHNXaXRoKEVESVRPUl9TVEFURV9TVE9SQUdFX1BSRUZJWCkpIHtcbiAgICAgICAgICAgIHJvb21JZCA9IGtleU5hbWUuc2xpY2UoRURJVE9SX1NUQVRFX1NUT1JBR0VfUFJFRklYLmxlbmd0aCkuc3BsaXQoXCJfJFwiKVswXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5TmFtZS5zdGFydHNXaXRoKFdZU0lXWUdfRURJVE9SX1NUQVRFX1NUT1JBR0VfUFJFRklYKSkge1xuICAgICAgICAgICAgcm9vbUlkID0ga2V5TmFtZS5zbGljZShXWVNJV1lHX0VESVRPUl9TVEFURV9TVE9SQUdFX1BSRUZJWC5sZW5ndGgpLnNwbGl0KFwiXyRcIilbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyb29tSWQpIGNvbnRpbnVlO1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHByZWZpeCBhbmQgdGhlIG9wdGlvbmFsIGV2ZW50IGlkIHN1ZmZpeCB0byBsZWF2ZSB0aGUgcm9vbSBpZFxuICAgICAgICBjb25zdCByb29tID0gTWF0cml4Q2xpZW50UGVnLnNhZmVHZXQoKS5nZXRSb29tKHJvb21JZCk7XG4gICAgICAgIGlmICghcm9vbSkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZW1vdmluZyBkcmFmdCBmb3IgdW5rbm93biByb29tIHdpdGgga2V5ICR7a2V5TmFtZX1gKTtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleU5hbWUpO1xuICAgICAgICB9XG4gICAg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