From 11cb2ef3f96907b707ca5cc8f20ab07c26d5f519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=9C=E6=AA=B8Cirtron?= <45784494+lcandy2@users.noreply.github.com> Date: Sat, 16 Mar 2024 16:48:35 +0800 Subject: [PATCH] fix(topic): fix jumping reply topic issue --- package.json | 2 +- src/topic/lib/compoments/panel-actions.tsx | 11 ++++++--- src/topic/lib/hash.ts | 18 ++++++++++++++ src/topic/lib/hooks/use-current-status.ts | 3 --- src/topic/lib/running-topic-detail-reply.ts | 4 ++-- src/topic/lib/running-topic-list-reply.ts | 21 ++++++++++------- src/topic/lib/window-message.ts | 26 +++++++++++++++------ 7 files changed, 61 insertions(+), 24 deletions(-) diff --git a/package.json b/package.json index 5efe043..37c4172 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "chaoxing-auto", "private": true, - "version": "1.0.1", + "version": "1.0.4", "type": "module", "homepage": "https://github.com/lcandy2/user.js", "author": "lcandy2 (甜檸Cirtron)", diff --git a/src/topic/lib/compoments/panel-actions.tsx b/src/topic/lib/compoments/panel-actions.tsx index 5e4714f..3d8a5da 100644 --- a/src/topic/lib/compoments/panel-actions.tsx +++ b/src/topic/lib/compoments/panel-actions.tsx @@ -6,6 +6,7 @@ import { useLogStore, useStatusStore } from "@topic/lib/store"; import { AppendHashSuccess, GetHashAction, + GetHashIndex, GetHashStart, GetHashSuccess, } from "@topic/lib/hash"; @@ -33,10 +34,12 @@ export default function PanelActions() { const actionFrameStatusStatus = actionFrameStatus.status; useEffect(() => { - const hashSuccess = GetHashSuccess(); - if (hashSuccess) { + if (GetHashSuccess()) { setCurrentStatus("success"); } + if (GetHashAction()) { + setIsInActionFrame(true); + } if (DetailMatch()) { setCurrentPage("detail"); } else if (ListMatch()) { @@ -50,6 +53,8 @@ export default function PanelActions() { if (topicDetail) { if ( topicDetail.replies && + topicDetail.replies[0] && + topicDetail.replies[0].content && topicDetail.replies[0].content === "NEED_OBSERVE" ) { console.debug("NEED_OBSERVE"); @@ -120,7 +125,7 @@ export default function PanelActions() { useEffect(() => { if (isInActionFrame && currentStatus === "success") { console.debug("PostMessageSuccess"); - PostMessageSuccess(); + PostMessageSuccess(GetHashIndex() || 0); } }, [isInActionFrame, currentStatus]); diff --git a/src/topic/lib/hash.ts b/src/topic/lib/hash.ts index f6d3994..2bf0c18 100644 --- a/src/topic/lib/hash.ts +++ b/src/topic/lib/hash.ts @@ -23,6 +23,15 @@ export const GetHashAction = () => { return hash.includes(text); }; +export const GetHashIndex = () => { + const text = "cxauto_index_"; + const index = hash.match(/cxauto_index_(\d+)/); + if (index) { + return parseInt(index[1]); + } + return 0; +}; + export const AppendHashStart = (url?: string) => { const text = "cxauto_start"; if (url) { @@ -50,3 +59,12 @@ export const AppendHashAction = (url?: string) => { appendHash(text); return true; }; + +export const AppendHashActionIndex = (index: number, url?: string) => { + const text = `#cxauto_index_${index}`; + if (url) { + return `${url}#${text}`; + } + appendHash(text); + return true; +}; diff --git a/src/topic/lib/hooks/use-current-status.ts b/src/topic/lib/hooks/use-current-status.ts index 10c830d..09aaf2d 100644 --- a/src/topic/lib/hooks/use-current-status.ts +++ b/src/topic/lib/hooks/use-current-status.ts @@ -42,9 +42,6 @@ export default function useCurrentStatus({ setIsButtonDisabled(false); const hashAction = GetHashAction(); const hashStart = GetHashStart() || hashAction; - if (hashAction) { - setIsInActionFrame(true); - } if (hashStart) { setCurrentStatus("triggered"); } diff --git a/src/topic/lib/running-topic-detail-reply.ts b/src/topic/lib/running-topic-detail-reply.ts index ce574b9..d0b20e6 100644 --- a/src/topic/lib/running-topic-detail-reply.ts +++ b/src/topic/lib/running-topic-detail-reply.ts @@ -159,14 +159,14 @@ const ActionButtonToSubmit = async ({ event.preventDefault(); }); } - await Standby(2); + await Standby(1); element.click(); textarea.value = ""; if (i === contextToReply.length - 1) { continue; } - await Standby(1); addLogItem(`Reply submitted, waiting to continue...`); + await Standby(1); } return true; } catch (error) { diff --git a/src/topic/lib/running-topic-list-reply.ts b/src/topic/lib/running-topic-list-reply.ts index 4091b5f..520da2d 100644 --- a/src/topic/lib/running-topic-list-reply.ts +++ b/src/topic/lib/running-topic-list-reply.ts @@ -1,7 +1,11 @@ import { useLogStore, useStatusStore } from "@topic/lib/store"; -import { AppendHashAction, AppendHashStart } from "@topic/lib/hash"; +import { + AppendHashAction, + AppendHashActionIndex, + AppendHashStart, +} from "@topic/lib/hash"; import MakeError from "@topic/lib/make-error"; -import { ReceiveMessage } from "@topic/lib/window-message"; +import { ClearMessage, ReceiveMessage } from "@topic/lib/window-message"; import Standby from "@topic/lib/standby"; import { ActionFrameStatusStatus } from "@topic/lib/types"; @@ -26,7 +30,7 @@ export default async function RunningTopicListReply( const init = InitRunningTopicListReply(); if (init) { addLogItem("开始:批量回复讨论"); - Standby(0.1); + await Standby(0.3); setActionFrameStatusStatus("waitingToStart"); } } @@ -36,11 +40,11 @@ export default async function RunningTopicListReply( const src = topicList[index].url; if (src) { const srcHashed = AppendHashAction(src).toString(); - setActionFrameStatusSrc(srcHashed); + const srcIndexed = AppendHashActionIndex(index, srcHashed).toString(); + setActionFrameStatusSrc(srcIndexed); addLogItem(`正在回复讨论:${topicList[index].title}`); - Standby(0.1); + await Standby(0.5); ReceiveMessage(); - Standby(0.3); setActionFrameStatusStatus("running"); } else { MakeError("未找到讨论链接"); @@ -53,7 +57,7 @@ export default async function RunningTopicListReply( if (status === "success") { const title = topicList[index].title; addLogItem(`已回复讨论:${title}`); - Standby(0.4); + await Standby(1); setActionFrameStatusStatus("waitingToNext"); } const total = actionFrameStatusTotal || 0; @@ -81,12 +85,13 @@ export const PrepareNextRunningTopicListReply = async ( index: number, total: number, ) => { + addLogItem("等待继续..."); setActionFrameStatusSrc(""); + await Standby(0.5); if (index === total - 1) { return true; } else { setActionFrameStatusIndex(index + 1); - Standby(0.5); setActionFrameStatusStatus("waitingToStart"); return false; } diff --git a/src/topic/lib/window-message.ts b/src/topic/lib/window-message.ts index a67d6a7..50d0704 100644 --- a/src/topic/lib/window-message.ts +++ b/src/topic/lib/window-message.ts @@ -1,20 +1,32 @@ import { useStatusStore } from "@topic/lib/store"; -export const PostMessageSuccess = () => { - console.debug("PostMessageSuccess"); - window.parent.postMessage( - { type: "cxauto_action_frame", status: "success" }, - "*", - ); +export const PostMessageSuccess = (index: number) => { + const message = { + type: "cxauto_action_frame", + status: "success", + index: index, + }; + console.debug("PostMessageSuccess", message); + window.parent.postMessage(message, "*"); }; export const ReceiveMessage = () => { window.addEventListener("message", (event) => { + console.debug("ReceiveMessage", event.data); if (event.data.type === "cxauto_action_frame") { const status = useStatusStore.getState().actionFrameStatus.status; - if (event.data.status === "success" && status === "running") { + const index = useStatusStore.getState().actionFrameStatus.index; + if ( + event.data.status === "success" && + status === "running" && + index === event.data.index + ) { useStatusStore.getState().setActionFrameStatusStatus("success"); } } }); }; + +export const ClearMessage = () => { + window.removeEventListener("message", () => {}); +};