Fix: Close chat before performing deletion (#4545)
Signed| @@ -9080,6 +9080,34 @@ export async function renameChat(oldFileName, newName) { | |||
| 9080 | } | 9080 | } |
| 9081 | 9081 | ||
| 9082 | /** | 9082 | /** |
| 9083 | * Closes the current chat, clearing all associated data and resetting the UI. | ||
| 9084 | * If a message generation is in progress, it prompts the user to stop it first. | ||
| 9085 | * @returns {Promise<boolean>} True if the chat was successfully closed, false otherwise. | ||
| 9086 | */ | ||
| 9087 | export async function closeCurrentChat() { | ||
| 9088 | if (is_send_press == false) { | ||
| 9089 | await waitUntilCondition(() => !isChatSaving, debounce_timeout.extended, 10); | ||
| 9090 | await clearChat(); | ||
| 9091 | chat.length = 0; | ||
| 9092 | resetSelectedGroup(); | ||
| 9093 | setCharacterId(undefined); | ||
| 9094 | setCharacterName(''); | ||
| 9095 | setActiveCharacter(null); | ||
| 9096 | setActiveGroup(null); | ||
| 9097 | this_edit_mes_id = undefined; | ||
| 9098 | chat_metadata = {}; | ||
| 9099 | selected_button = 'characters'; | ||
| 9100 | $('#rm_button_selected_ch').children('h2').text(''); | ||
| 9101 | select_rm_characters(); | ||
| 9102 | await eventSource.emit(event_types.CHAT_CHANGED, getCurrentChatId()); | ||
| 9103 | return true; | ||
| 9104 | } else { | ||
| 9105 | toastr.info(t`Please stop the message generation first.`); | ||
| 9106 | return false; | ||
| 9107 | } | ||
| 9108 | } | ||
| 9109 | |||
| 9110 | /** | ||
| 9083 | * Forces the update of the chat name for a remote character. | 9111 | * Forces the update of the chat name for a remote character. |
| 9084 | * @param {string|number} characterId Character ID to update chat name for | 9112 | * @param {string|number} characterId Character ID to update chat name for |
| 9085 | * @param {string} newName New name for the chat | 9113 | * @param {string} newName New name for the chat |
| @@ -9144,6 +9172,22 @@ export async function deleteCharacter(characterKey, { deleteChats = true } = {}) | |||
| 9144 | characterKey = [characterKey]; | 9172 | characterKey = [characterKey]; |
| 9145 | } | 9173 | } |
| 9146 | 9174 | ||
| 9175 | const inTempChat = this_chid === undefined && name2 === neutralCharacterName; | ||
| 9176 | if (inTempChat) { | ||
| 9177 | const confirmClose = await Popup.show.confirm( | ||
| 9178 | t`You are currently in a temporary chat.`, | ||
| 9179 | t`Deleting this character will close the chat and you will lose any unsaved messages. Do you want to proceed?`, | ||
| 9180 | ); | ||
| 9181 | if (!confirmClose) { | ||
| 9182 | return; | ||
| 9183 | } | ||
| 9184 | } | ||
| 9185 | |||
| 9186 | const closeChatResult = await closeCurrentChat(); | ||
| 9187 | if (!closeChatResult) { | ||
| 9188 | return; | ||
| 9189 | } | ||
| 9190 | |||
| 9147 | for (const key of characterKey) { | 9191 | for (const key of characterKey) { |
| 9148 | const character = characters.find(x => x.avatar == key); | 9192 | const character = characters.find(x => x.avatar == key); |
| 9149 | if (!character) { | 9193 | if (!character) { |
| @@ -9947,24 +9991,7 @@ jQuery(async function () { | |||
| 9947 | } | 9991 | } |
| 9948 | 9992 | ||
| 9949 | else if (id == 'option_close_chat') { | 9993 | else if (id == 'option_close_chat') { |
| 9950 | if (is_send_press == false) { | 9994 | await closeCurrentChat(); |
| 9951 | await waitUntilCondition(() => !isChatSaving, debounce_timeout.extended, 10); | ||
| 9952 | await clearChat(); | ||
| 9953 | chat.length = 0; | ||
| 9954 | resetSelectedGroup(); | ||
| 9955 | setCharacterId(undefined); | ||
| 9956 | setCharacterName(''); | ||
| 9957 | setActiveCharacter(null); | ||
| 9958 | setActiveGroup(null); | ||
| 9959 | this_edit_mes_id = undefined; | ||
| 9960 | chat_metadata = {}; | ||
| 9961 | selected_button = 'characters'; | ||
| 9962 | $('#rm_button_selected_ch').children('h2').text(''); | ||
| 9963 | select_rm_characters(); | ||
| 9964 | await eventSource.emit(event_types.CHAT_CHANGED, getCurrentChatId()); | ||
| 9965 | } else { | ||
| 9966 | toastr.info(t`Please stop the message generation first.`); | ||
| 9967 | } | ||
| 9968 | } | 9995 | } |
| 9969 | 9996 | ||
| 9970 | else if (id === 'option_settings') { | 9997 | else if (id === 'option_settings') { |