UNPKG

matrix-react-sdk

Version:
107 lines (104 loc) 17.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _matrix = require("matrix-js-sdk/src/matrix"); var _logger = require("matrix-js-sdk/src/logger"); var _Exporter = _interopRequireDefault(require("./Exporter")); var _DateUtils = require("../../DateUtils"); var _languageHandler = require("../../languageHandler"); var _EventTileFactory = require("../../events/EventTileFactory"); /* Copyright 2024 New Vector Ltd. Copyright 2021, 2022 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. */ class JSONExporter extends _Exporter.default { constructor(room, exportType, exportOptions, setProgressText) { super(room, exportType, exportOptions, setProgressText); (0, _defineProperty2.default)(this, "totalSize", 0); (0, _defineProperty2.default)(this, "messages", []); } get destinationFileName() { return this.makeFileNameNoExtension() + ".json"; } createJSONString() { const exportDate = (0, _DateUtils.formatFullDateNoDayNoTime)(new Date()); const creator = this.room.currentState.getStateEvents(_matrix.EventType.RoomCreate, "")?.getSender(); const creatorName = creator && this.room?.getMember(creator)?.rawDisplayName || creator; const topic = this.room.currentState.getStateEvents(_matrix.EventType.RoomTopic, "")?.getContent()?.topic || ""; const exporter = this.room.client.getUserId(); const exporterName = this.room?.getMember(exporter)?.rawDisplayName || exporter; const jsonObject = { room_name: this.room.name, room_creator: creatorName, topic, export_date: exportDate, exported_by: exporterName, messages: this.messages }; return JSON.stringify(jsonObject, null, 2); } async getJSONString(mxEv) { if (this.exportOptions.attachmentsIncluded && this.isAttachment(mxEv)) { try { const blob = await this.getMediaBlob(mxEv); if (this.totalSize + blob.size < this.exportOptions.maxSize) { this.totalSize += blob.size; const filePath = this.getFilePath(mxEv); if (this.totalSize == this.exportOptions.maxSize) { this.exportOptions.attachmentsIncluded = false; } this.addFile(filePath, blob); } } catch (err) { _logger.logger.log("Error fetching file: " + err); } } return mxEv.getEffectiveEvent(); } async createOutput(events) { for (let i = 0; i < events.length; i++) { const event = events[i]; this.updateProgress((0, _languageHandler._t)("export_chat|processing_event_n", { number: i + 1, total: events.length }), false, true); if (this.cancelled) return this.cleanUp(); if (!(0, _EventTileFactory.haveRendererForEvent)(event, this.room.client, false)) continue; this.messages.push(await this.getJSONString(event)); } return this.createJSONString(); } async export() { _logger.logger.info("Starting export process..."); _logger.logger.info("Fetching events..."); const fetchStart = performance.now(); const res = await this.getRequiredEvents(); const fetchEnd = performance.now(); _logger.logger.log(`Fetched ${res.length} events in ${(fetchEnd - fetchStart) / 1000}s`); _logger.logger.info("Creating output..."); const text = await this.createOutput(res); if (this.files.length) { this.addFile("export.json", new Blob([text])); await this.downloadZIP(); } else { const fileName = this.destinationFileName; this.downloadPlainText(fileName, text); } const exportEnd = performance.now(); if (this.cancelled) { _logger.logger.info("Export cancelled successfully"); } else { _logger.logger.info("Export successful!"); _logger.logger.log(`Exported ${res.length} events in ${(exportEnd - fetchStart) / 1000} seconds`); } this.cleanUp(); } } exports.default = JSONExporter; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9sb2dnZXIiLCJfRXhwb3J0ZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0RhdGVVdGlscyIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfRXZlbnRUaWxlRmFjdG9yeSIsIkpTT05FeHBvcnRlciIsIkV4cG9ydGVyIiwiY29uc3RydWN0b3IiLCJyb29tIiwiZXhwb3J0VHlwZSIsImV4cG9ydE9wdGlvbnMiLCJzZXRQcm9ncmVzc1RleHQiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsImRlc3RpbmF0aW9uRmlsZU5hbWUiLCJtYWtlRmlsZU5hbWVOb0V4dGVuc2lvbiIsImNyZWF0ZUpTT05TdHJpbmciLCJleHBvcnREYXRlIiwiZm9ybWF0RnVsbERhdGVOb0RheU5vVGltZSIsIkRhdGUiLCJjcmVhdG9yIiwiY3VycmVudFN0YXRlIiwiZ2V0U3RhdGVFdmVudHMiLCJFdmVudFR5cGUiLCJSb29tQ3JlYXRlIiwiZ2V0U2VuZGVyIiwiY3JlYXRvck5hbWUiLCJnZXRNZW1iZXIiLCJyYXdEaXNwbGF5TmFtZSIsInRvcGljIiwiUm9vbVRvcGljIiwiZ2V0Q29udGVudCIsImV4cG9ydGVyIiwiY2xpZW50IiwiZ2V0VXNlcklkIiwiZXhwb3J0ZXJOYW1lIiwianNvbk9iamVjdCIsInJvb21fbmFtZSIsIm5hbWUiLCJyb29tX2NyZWF0b3IiLCJleHBvcnRfZGF0ZSIsImV4cG9ydGVkX2J5IiwibWVzc2FnZXMiLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0SlNPTlN0cmluZyIsIm14RXYiLCJhdHRhY2htZW50c0luY2x1ZGVkIiwiaXNBdHRhY2htZW50IiwiYmxvYiIsImdldE1lZGlhQmxvYiIsInRvdGFsU2l6ZSIsInNpemUiLCJtYXhTaXplIiwiZmlsZVBhdGgiLCJnZXRGaWxlUGF0aCIsImFkZEZpbGUiLCJlcnIiLCJsb2dnZXIiLCJsb2ciLCJnZXRFZmZlY3RpdmVFdmVudCIsImNyZWF0ZU91dHB1dCIsImV2ZW50cyIsImkiLCJsZW5ndGgiLCJldmVudCIsInVwZGF0ZVByb2dyZXNzIiwiX3QiLCJudW1iZXIiLCJ0b3RhbCIsImNhbmNlbGxlZCIsImNsZWFuVXAiLCJoYXZlUmVuZGVyZXJGb3JFdmVudCIsInB1c2giLCJleHBvcnQiLCJpbmZvIiwiZmV0Y2hTdGFydCIsInBlcmZvcm1hbmNlIiwibm93IiwicmVzIiwiZ2V0UmVxdWlyZWRFdmVudHMiLCJmZXRjaEVuZCIsInRleHQiLCJmaWxlcyIsIkJsb2IiLCJkb3dubG9hZFpJUCIsImZpbGVOYW1lIiwiZG93bmxvYWRQbGFpblRleHQiLCJleHBvcnRFbmQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL2V4cG9ydFV0aWxzL0pTT05FeHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEsIDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgUm9vbSwgSUV2ZW50LCBNYXRyaXhFdmVudCwgRXZlbnRUeXBlIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL2xvZ2dlclwiO1xuXG5pbXBvcnQgRXhwb3J0ZXIgZnJvbSBcIi4vRXhwb3J0ZXJcIjtcbmltcG9ydCB7IGZvcm1hdEZ1bGxEYXRlTm9EYXlOb1RpbWUgfSBmcm9tIFwiLi4vLi4vRGF0ZVV0aWxzXCI7XG5pbXBvcnQgeyBFeHBvcnRUeXBlLCBJRXhwb3J0T3B0aW9ucyB9IGZyb20gXCIuL2V4cG9ydFV0aWxzXCI7XG5pbXBvcnQgeyBfdCB9IGZyb20gXCIuLi8uLi9sYW5ndWFnZUhhbmRsZXJcIjtcbmltcG9ydCB7IGhhdmVSZW5kZXJlckZvckV2ZW50IH0gZnJvbSBcIi4uLy4uL2V2ZW50cy9FdmVudFRpbGVGYWN0b3J5XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpTT05FeHBvcnRlciBleHRlbmRzIEV4cG9ydGVyIHtcbiAgICBwcm90ZWN0ZWQgdG90YWxTaXplID0gMDtcbiAgICBwcm90ZWN0ZWQgbWVzc2FnZXM6IFJlY29yZDxzdHJpbmcsIGFueT5bXSA9IFtdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICByb29tOiBSb29tLFxuICAgICAgICBleHBvcnRUeXBlOiBFeHBvcnRUeXBlLFxuICAgICAgICBleHBvcnRPcHRpb25zOiBJRXhwb3J0T3B0aW9ucyxcbiAgICAgICAgc2V0UHJvZ3Jlc3NUZXh0OiBSZWFjdC5EaXNwYXRjaDxSZWFjdC5TZXRTdGF0ZUFjdGlvbjxzdHJpbmc+PixcbiAgICApIHtcbiAgICAgICAgc3VwZXIocm9vbSwgZXhwb3J0VHlwZSwgZXhwb3J0T3B0aW9ucywgc2V0UHJvZ3Jlc3NUZXh0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRlc3RpbmF0aW9uRmlsZU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFrZUZpbGVOYW1lTm9FeHRlbnNpb24oKSArIFwiLmpzb25cIjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlSlNPTlN0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBleHBvcnREYXRlID0gZm9ybWF0RnVsbERhdGVOb0RheU5vVGltZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgY29uc3QgY3JlYXRvciA9IHRoaXMucm9vbS5jdXJyZW50U3RhdGUuZ2V0U3RhdGVFdmVudHMoRXZlbnRUeXBlLlJvb21DcmVhdGUsIFwiXCIpPy5nZXRTZW5kZXIoKTtcbiAgICAgICAgY29uc3QgY3JlYXRvck5hbWUgPSAoY3JlYXRvciAmJiB0aGlzLnJvb20/LmdldE1lbWJlcihjcmVhdG9yKT8ucmF3RGlzcGxheU5hbWUpIHx8IGNyZWF0b3I7XG4gICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy5yb29tLmN1cnJlbnRTdGF0ZS5nZXRTdGF0ZUV2ZW50cyhFdmVudFR5cGUuUm9vbVRvcGljLCBcIlwiKT8uZ2V0Q29udGVudCgpPy50b3BpYyB8fCBcIlwiO1xuICAgICAgICBjb25zdCBleHBvcnRlciA9IHRoaXMucm9vbS5jbGllbnQuZ2V0VXNlcklkKCkhO1xuICAgICAgICBjb25zdCBleHBvcnRlck5hbWUgPSB0aGlzLnJvb20/LmdldE1lbWJlcihleHBvcnRlcik/LnJhd0Rpc3BsYXlOYW1lIHx8IGV4cG9ydGVyO1xuICAgICAgICBjb25zdCBqc29uT2JqZWN0ID0ge1xuICAgICAgICAgICAgcm9vbV9uYW1lOiB0aGlzLnJvb20ubmFtZSxcbiAgICAgICAgICAgIHJvb21fY3JlYXRvcjogY3JlYXRvck5hbWUsXG4gICAgICAgICAgICB0b3BpYyxcbiAgICAgICAgICAgIGV4cG9ydF9kYXRlOiBleHBvcnREYXRlLFxuICAgICAgICAgICAgZXhwb3J0ZWRfYnk6IGV4cG9ydGVyTmFtZSxcbiAgICAgICAgICAgIG1lc3NhZ2VzOiB0aGlzLm1lc3NhZ2VzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbk9iamVjdCwgbnVsbCwgMik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGdldEpTT05TdHJpbmcobXhFdjogTWF0cml4RXZlbnQpOiBQcm9taXNlPElFdmVudD4ge1xuICAgICAgICBpZiAodGhpcy5leHBvcnRPcHRpb25zLmF0dGFjaG1lbnRzSW5jbHVkZWQgJiYgdGhpcy5pc0F0dGFjaG1lbnQobXhFdikpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHRoaXMuZ2V0TWVkaWFCbG9iKG14RXYpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRvdGFsU2l6ZSArIGJsb2Iuc2l6ZSA8IHRoaXMuZXhwb3J0T3B0aW9ucy5tYXhTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxTaXplICs9IGJsb2Iuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSB0aGlzLmdldEZpbGVQYXRoKG14RXYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50b3RhbFNpemUgPT0gdGhpcy5leHBvcnRPcHRpb25zLm1heFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0T3B0aW9ucy5hdHRhY2htZW50c0luY2x1ZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRGaWxlKGZpbGVQYXRoLCBibG9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIubG9nKFwiRXJyb3IgZmV0Y2hpbmcgZmlsZTogXCIgKyBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteEV2LmdldEVmZmVjdGl2ZUV2ZW50KCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZU91dHB1dChldmVudHM6IE1hdHJpeEV2ZW50W10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBldmVudHNbaV07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKFxuICAgICAgICAgICAgICAgIF90KFwiZXhwb3J0X2NoYXR8cHJvY2Vzc2luZ19ldmVudF9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiBpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2ZW50cy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHJldHVybiB0aGlzLmNsZWFuVXAoKTtcbiAgICAgICAgICAgIGlmICghaGF2ZVJlbmRlcmVyRm9yRXZlbnQoZXZlbnQsIHRoaXMucm9vbS5jbGllbnQsIGZhbHNlKSkgY29udGludWU7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2goYXdhaXQgdGhpcy5nZXRKU09OU3RyaW5nKGV2ZW50KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlSlNPTlN0cmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleHBvcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiU3RhcnRpbmcgZXhwb3J0IHByb2Nlc3MuLi5cIik7XG4gICAgICAgIGxvZ2dlci5pbmZvKFwiRmV0Y2hpbmcgZXZlbnRzLi4uXCIpO1xuXG4gICAgICAgIGNvbnN0IGZldGNoU3RhcnQgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRSZXF1aXJlZEV2ZW50cygpO1xuICAgICAgICBjb25zdCBmZXRjaEVuZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgICAgIGxvZ2dlci5sb2coYEZldGNoZWQgJHtyZXMubGVuZ3RofSBldmVudHMgaW4gJHsoZmV0Y2hFbmQgLSBmZXRjaFN0YXJ0KSAvIDEwMDB9c2ApO1xuXG4gICAgICAgIGxvZ2dlci5pbmZvKFwiQ3JlYXRpbmcgb3V0cHV0Li4uXCIpO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgdGhpcy5jcmVhdGVPdXRwdXQocmVzKTtcblxuICAgICAgICBpZiAodGhpcy5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZShcImV4cG9ydC5qc29uXCIsIG5ldyBCbG9iKFt0ZXh0XSkpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5kb3dubG9hZFpJUCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSB0aGlzLmRlc3RpbmF0aW9uRmlsZU5hbWU7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkUGxhaW5UZXh0KGZpbGVOYW1lLCB0ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cG9ydEVuZCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oXCJFeHBvcnQgY2FuY2VsbGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKFwiRXhwb3J0IHN1Y2Nlc3NmdWwhXCIpO1xuICAgICAgICAgICAgbG9nZ2VyLmxvZyhgRXhwb3J0ZWQgJHtyZXMubGVuZ3RofSBldmVudHMgaW4gJHsoZXhwb3J0RW5kIC0gZmV0Y2hTdGFydCkgLyAxMDAwfSBzZWNvbmRzYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsZWFuVXAoKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsU0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssZ0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFXZSxNQUFNTyxZQUFZLFNBQVNDLGlCQUFRLENBQUM7RUFJeENDLFdBQVdBLENBQ2RDLElBQVUsRUFDVkMsVUFBc0IsRUFDdEJDLGFBQTZC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