From dae72c6e66570da9145462067d3af7a16bb27994 Mon Sep 17 00:00:00 2001 From: qcrao Date: Tue, 9 Jul 2024 15:13:49 +0800 Subject: [PATCH] add bulk archive --- manifest.json | 11 ++--- popup.js | 111 ++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 112 insertions(+), 10 deletions(-) diff --git a/manifest.json b/manifest.json index 2b18411..c0cec55 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "ChatGPT Bulk Delete", - "version": "4.6", + "version": "5.0", "description": "A Chrome extension to bulk delete ChatGPT conversations", "icons": { "48": "icon48.png" @@ -11,11 +11,8 @@ "default_popup": "popup.html", "default_title": "Bulk Delete Conversations" }, - "permissions": [ - "scripting", - "activeTab", - "https://bulk-delete-chatgpt-worker.qcrao.com/*" - ], + "permissions": ["scripting", "activeTab", "identity", "identity.email"], + "host_permissions": ["https://bulk-delete-chatgpt-worker.qcrao.com/*"], "content_scripts": [ { "matches": ["*://chat.openai.com/*"], @@ -23,7 +20,7 @@ "globals.js", "addCheckboxes.js", "bulkDeleteConversations.js", - "deleteConversations.js" + "bulkArchiveConversations.js" ], "run_at": "document_idle" } diff --git a/popup.js b/popup.js index 517094a..3049028 100644 --- a/popup.js +++ b/popup.js @@ -28,7 +28,100 @@ function initializeButtons() { addButtonListener("bulk-delete", "bulkDeleteConversations.js"); addButtonListener("toggle-checkboxes", "toggleCheckboxes.js"); addButtonListener("remove-checkboxes", "removeCheckboxes.js"); - addButtonListener("bulk-archive", "bulkArchiveConversations.js"); + + const bulkArchiveButton = document.getElementById("bulk-archive"); + bulkArchiveButton.addEventListener("click", handleBulkArchive); +} + +async function checkMembershipStatus() { + const userInfo = await getUserInfo(); + if (!userInfo) { + console.error("Unable to get user info"); + updateBulkArchiveButton(false); + return; + } + + try { + const response = await fetch( + `https://bulk-delete-chatgpt-worker.qcrao.com/check-payment-status?user_id=${encodeURIComponent( + userInfo.id + )}` + ); + const data = await response.json(); + updateBulkArchiveButton(data.isPaid); + } catch (error) { + console.error("Error checking membership status:", error); + updateBulkArchiveButton(false); + } +} + +function updateBulkArchiveButton(isPaid) { + const bulkArchiveButton = document.getElementById("bulk-archive"); + if (isPaid) { + bulkArchiveButton.classList.remove("locked"); + bulkArchiveButton.querySelector("span").textContent = ""; + } else { + bulkArchiveButton.classList.add("locked"); + bulkArchiveButton.querySelector("span").textContent = "🔒"; + } +} + +async function handleBulkArchive() { + const userInfo = await getUserInfo(); + if (!userInfo) { + console.error("Unable to get user info"); + alert("Unable to verify user. Please try again later."); + return; + } + + const response = await fetch( + `https://bulk-delete-chatgpt-worker.qcrao.com/check-payment-status?user_id=${encodeURIComponent( + userInfo.id + )}` + ); + const data = await response.json(); + + if (data.isPaid) { + chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => { + if (tab) { + chrome.scripting.executeScript({ + target: { tabId: tab.id }, + files: ["bulkArchiveConversations.js"], + }); + } + }); + } else { + if (confirm("一次性付费 0.99 USD,购买权限。是否继续?")) { + const payResponse = await fetch( + `https://bulk-delete-chatgpt-worker.qcrao.com/pay-bulk-archive?user_id=${encodeURIComponent( + userInfo.id + )}`, + { + method: "POST", + } + ); + const payData = await payResponse.json(); + console.log("payData", payData); + if (payData.paymentUrl) { + window.open(payData.paymentUrl, "_blank"); + } else { + alert("获取支付链接失败,请稍后再试。"); + } + } + } +} + +function getUserInfo() { + return new Promise((resolve) => { + chrome.identity.getProfileUserInfo({ accountStatus: "ANY" }, (userInfo) => { + if (chrome.runtime.lastError) { + console.error(chrome.runtime.lastError); + resolve(null); + } else { + resolve(userInfo); + } + }); + }); } function updateCopyrightYear() { @@ -38,5 +131,17 @@ function updateCopyrightYear() { ).innerHTML = `© ${currentYear} qcrao@GitHub`; } -initializeButtons(); -updateCopyrightYear(); +document.addEventListener("DOMContentLoaded", function () { + initializeButtons(); + updateCopyrightYear(); + checkMembershipStatus(); +}); + +// 每次打开popup时检查会员状态 +chrome.runtime.onConnect.addListener(function (port) { + if (port.name === "popup") { + port.onDisconnect.addListener(function () { + checkMembershipStatus(); + }); + } +});