diff --git a/UPDATE_LOG.md b/UPDATE_LOG.md
index 47629a4..409c78c 100644
--- a/UPDATE_LOG.md
+++ b/UPDATE_LOG.md
@@ -1,5 +1,10 @@
# UPDATE LOG
+## v0.5.2
+
+feat:
+- optimize the generated pdf file size
+
## v0.5.1
some optimization
diff --git a/src-tauri/src/assets/export.js b/src-tauri/src/assets/export.js
index bd78fb6..f90a389 100644
--- a/src-tauri/src/assets/export.js
+++ b/src-tauri/src/assets/export.js
@@ -1,6 +1,7 @@
// *** Core Script - Export ***
// @ref: https://github.com/liady/ChatGPT-pdf
+const buttonOuterHTMLFallback = ``;
async function init() {
const chatConf = await invoke('get_chat_conf') || {};
if (window.buttonsInterval) {
@@ -11,14 +12,15 @@ async function init() {
if (!actionsArea) {
return;
}
- const buttons = actionsArea.querySelectorAll("button");
- const hasTryAgainButton = Array.from(buttons).some((button) => {
- return !button.id?.includes("download");
- });
- if (hasTryAgainButton && buttons.length === 1) {
- const TryAgainButton = actionsArea.querySelector("button");
+ if (shouldAddButtons(actionsArea)) {
+ let TryAgainButton = actionsArea.querySelector("button");
+ if (!TryAgainButton) {
+ const parentNode = document.createElement("div");
+ parentNode.innerHTML = buttonOuterHTMLFallback;
+ TryAgainButton = parentNode.querySelector("button");
+ }
addActionsButtons(actionsArea, TryAgainButton, chatConf);
- } else if (!hasTryAgainButton) {
+ } else if (shouldRemoveButtons()) {
removeButtons();
}
}, 200);
@@ -29,32 +31,42 @@ const Format = {
PDF: "pdf",
};
-function addActionsButtons(actionsArea, TryAgainButton, chatConf) {
- const downloadButton = TryAgainButton.cloneNode(true);
- downloadButton.id = "download-png-button";
- downloadButton.innerText = "Generate PNG";
- downloadButton.onclick = () => {
- downloadThread();
- };
- actionsArea.appendChild(downloadButton);
-
- const downloadPdfButton = TryAgainButton.cloneNode(true);
- downloadPdfButton.id = "download-pdf-button";
- downloadPdfButton.innerText = "Download PDF";
- downloadPdfButton.onclick = () => {
- downloadThread({ as: Format.PDF });
- };
- actionsArea.appendChild(downloadPdfButton);
-
- if (new RegExp('//chat.openai.com').test(chatConf.origin)) {
- const exportHtml = TryAgainButton.cloneNode(true);
- exportHtml.id = "download-html-button";
- exportHtml.innerText = "Share Link";
- exportHtml.onclick = () => {
- sendRequest();
- };
- actionsArea.appendChild(exportHtml);
+function shouldRemoveButtons() {
+ const isOpenScreen = document.querySelector("h1.text-4xl");
+ if(isOpenScreen){
+ return true;
}
+ const inConversation = document.querySelector("form button>div");
+ if(inConversation){
+ return true;
+ }
+ return false;
+}
+
+function shouldAddButtons(actionsArea) {
+ // first, check if there's a "Try Again" button and no other buttons
+ const buttons = actionsArea.querySelectorAll("button");
+ const hasTryAgainButton = Array.from(buttons).some((button) => {
+ return !button.id?.includes("download");
+ });
+ if (hasTryAgainButton && buttons.length === 1) {
+ return true;
+ }
+
+ // otherwise, check if open screen is not visible
+ const isOpenScreen = document.querySelector("h1.text-4xl");
+ if (isOpenScreen) {
+ return false;
+ }
+
+ // check if the conversation is finished and there are no share buttons
+ const finishedConversation = document.querySelector("form button>svg");
+ const hasShareButtons = actionsArea.querySelectorAll("button[share-ext]");
+ if (finishedConversation && !hasShareButtons.length) {
+ return true;
+ }
+
+ return false;
}
function removeButtons() {
@@ -72,6 +84,33 @@ function removeButtons() {
}
}
+function addActionsButtons(actionsArea, TryAgainButton) {
+ const downloadButton = TryAgainButton.cloneNode(true);
+ downloadButton.id = "download-png-button";
+ downloadButton.setAttribute("share-ext", "true");
+ downloadButton.innerText = "Generate PNG";
+ downloadButton.onclick = () => {
+ downloadThread();
+ };
+ actionsArea.appendChild(downloadButton);
+ const downloadPdfButton = TryAgainButton.cloneNode(true);
+ downloadPdfButton.id = "download-pdf-button";
+ downloadButton.setAttribute("share-ext", "true");
+ downloadPdfButton.innerText = "Download PDF";
+ downloadPdfButton.onclick = () => {
+ downloadThread({ as: Format.PDF });
+ };
+ actionsArea.appendChild(downloadPdfButton);
+ const exportHtml = TryAgainButton.cloneNode(true);
+ exportHtml.id = "download-html-button";
+ downloadButton.setAttribute("share-ext", "true");
+ exportHtml.innerText = "Share Link";
+ exportHtml.onclick = () => {
+ sendRequest();
+ };
+ actionsArea.appendChild(exportHtml);
+}
+
function downloadThread({ as = Format.PNG } = {}) {
const elements = new Elements();
elements.fixLocation();
@@ -113,7 +152,7 @@ function handlePdf(imgData, canvas, pixelRatio) {
]);
var pdfWidth = pdf.internal.pageSize.getWidth();
var pdfHeight = pdf.internal.pageSize.getHeight();
- pdf.addImage(imgData, "PNG", 0, 0, pdfWidth, pdfHeight);
+ pdf.addImage(imgData, "PNG", 0, 0, pdfWidth, pdfHeight, '', 'FAST');
const data = pdf.__private__.getArrayBuffer(pdf.__private__.buildDocument());
invoke('download', { name: `chatgpt-${Date.now()}.pdf`, blob: Array.from(new Uint8Array(data)) });
diff --git a/src/view/SyncPrompts/index.tsx b/src/view/SyncPrompts/index.tsx
index 6c49338..78b21ed 100644
--- a/src/view/SyncPrompts/index.tsx
+++ b/src/view/SyncPrompts/index.tsx
@@ -2,9 +2,8 @@ import { useEffect, useState } from 'react';
import { Table, Button, message } from 'antd';
import { invoke } from '@tauri-apps/api';
import { fetch, ResponseType } from '@tauri-apps/api/http';
-import { writeTextFile, readTextFile } from '@tauri-apps/api/fs';
+import { writeTextFile } from '@tauri-apps/api/fs';
-import useInit from '@/hooks/useInit';
import useColumns from '@/hooks/useColumns';
import useData from '@/hooks/useData';
import useChatModel from '@/hooks/useChatModel';
@@ -21,21 +20,13 @@ export default function LanguageModel() {
const { opData, opInit, opReplace, opSafeKey } = useData([]);
const { columns, ...opInfo } = useColumns(modelColumns());
- // useInit(async () => {
- // // const filename = await chatPromptsPath();
- // // const data = await readTextFile(filename);
- // // const list: Record[] = await invoke('parse_prompt', { data });
- // // const fileData: Record = await invoke('metadata', { path: filename });
- // // setLastUpdated(fileData.accessedAtMs);
- // // opInit(list);
- // console.log('«31» /view/SyncPrompts/index.tsx ~> ', modelJson);
-
- // opInit([]);
- // })
-
useEffect(() => {
if (!modelJson?.sys_sync_prompts) return;
- opInit(modelJson?.sys_sync_prompts)
+ opInit(modelJson?.sys_sync_prompts);
+ (async () => {
+ const fileData: Record = await invoke('metadata', { path: await chatPromptsPath() });
+ setLastUpdated(fileData.accessedAtMs);
+ })();
}, [modelJson?.sys_sync_prompts])
const handleSync = async () => {