فهرست منبع

better handling of large pages

Former-commit-id: d3ef916ff60e33785952a50c1c9d225518e800ea
Gildas 6 سال پیش
والد
کامیت
95489f63b3
2فایلهای تغییر یافته به همراه34 افزوده شده و 6 حذف شده
  1. 18 1
      extension/core/bg/editor.js
  2. 16 5
      extension/ui/bg/ui-editor.js

+ 18 - 1
extension/core/bg/editor.js

@@ -25,6 +25,7 @@
 
 singlefile.extension.core.bg.editor = (() => {
 
+	const MAX_CONTENT_SIZE = 32 * (1024 * 1024);
 	const tabsData = new Map();
 	const partialContents = new Map();
 	const EDITOR_URL = browser.runtime.getURL("/extension/ui/editor/editor.html");
@@ -58,7 +59,23 @@ singlefile.extension.core.bg.editor = (() => {
 	async function onMessage(message, sender) {
 		if (message.method.endsWith(".getTabData")) {
 			const tab = sender.tab;
-			return tabsData.get(tab.id);
+			const tabData = tabsData.get(tab.id);
+			if (tabData) {
+				const content = JSON.stringify(tabData);
+				for (let blockIndex = 0; blockIndex * MAX_CONTENT_SIZE < content.length; blockIndex++) {
+					const message = {
+						method: "editor.setTabData"
+					};
+					message.truncated = content.length > MAX_CONTENT_SIZE;
+					if (message.truncated) {
+						message.finished = (blockIndex + 1) * MAX_CONTENT_SIZE > content.length;
+						message.content = content.substring(blockIndex * MAX_CONTENT_SIZE, (blockIndex + 1) * MAX_CONTENT_SIZE);
+					} else {
+						message.content = content;
+					}
+					await singlefile.extension.core.bg.tabs.sendMessage(tab.id, message);
+				}
+			}
 		}
 		if (message.method.endsWith(".open")) {
 			let contents;

+ 16 - 5
extension/ui/bg/ui-editor.js

@@ -44,7 +44,7 @@ singlefile.extension.ui.bg.editor = (() => {
 	const undoAllCutPageButton = document.querySelector(".undo-all-cut-page-button");
 	const savePageButton = document.querySelector(".save-page-button");
 
-	let tabData;
+	let tabData, tabDataContents = [];
 
 	addYellowNoteButton.title = browser.i18n.getMessage("editorAddYellowNote");
 	addPinkNoteButton.title = browser.i18n.getMessage("editorAddPinkNote");
@@ -181,10 +181,7 @@ singlefile.extension.ui.bg.editor = (() => {
 			singlefile.extension.core.content.download.downloadPage(pageData, tabData.options);
 		}
 	};
-	window.onload = async () => {
-		tabData = await browser.runtime.sendMessage({ method: "editor.getTabData" });
-		editorElement.contentWindow.postMessage(JSON.stringify({ method: "init", content: tabData.content }), "*");
-	};
+	window.onload = browser.runtime.sendMessage({ method: "editor.getTabData" });
 
 	browser.runtime.onMessage.addListener(message => {
 		if (message.method == "content.save") {
@@ -196,6 +193,20 @@ singlefile.extension.ui.bg.editor = (() => {
 			browser.runtime.sendMessage({ method: "tabs.promptValueResponse", value: prompt(message.promptMessage) });
 			return {};
 		}
+		if (message.method == "editor.setTabData") {
+			if (message.truncated) {
+				tabDataContents.push(message.content);
+			} else {
+				tabDataContents = [message.content];
+			}
+			if (!message.truncated || message.finished) {
+				tabData = JSON.parse(tabDataContents.join(""));
+				tabDataContents = [];
+				editorElement.contentWindow.postMessage(JSON.stringify({ method: "init", content: tabData.content }), "*");
+				delete tabData.content;
+			}
+			return {};
+		}
 	});
 
 	function savePage() {