diff --git a/public/img/No-Image-Placeholder.svg b/public/img/No-Image-Placeholder.svg deleted file mode 100644 index d21137506..000000000 --- a/public/img/No-Image-Placeholder.svg +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - NO IMAGEAVAILABLE - - diff --git a/public/img/addbg3.png b/public/img/addbg3.png deleted file mode 100644 index 1b7dd7113..000000000 Binary files a/public/img/addbg3.png and /dev/null differ diff --git a/public/img/ai4.png b/public/img/ai4.png deleted file mode 100644 index a41de2da4..000000000 Binary files a/public/img/ai4.png and /dev/null differ diff --git a/public/img/apple-icon-114x114.png b/public/img/apple-icon-114x114.png deleted file mode 100644 index cc947f79c..000000000 Binary files a/public/img/apple-icon-114x114.png and /dev/null differ diff --git a/public/img/apple-icon-144x144.png b/public/img/apple-icon-144x144.png deleted file mode 100644 index 7f5635e41..000000000 Binary files a/public/img/apple-icon-144x144.png and /dev/null differ diff --git a/public/img/apple-icon-57x57.png b/public/img/apple-icon-57x57.png deleted file mode 100644 index 88879c371..000000000 Binary files a/public/img/apple-icon-57x57.png and /dev/null differ diff --git a/public/img/apple-icon-72x72.png b/public/img/apple-icon-72x72.png deleted file mode 100644 index 48c7ff215..000000000 Binary files a/public/img/apple-icon-72x72.png and /dev/null differ diff --git a/public/img/default-expressions/admiration.png b/public/img/default-expressions/admiration.png deleted file mode 100644 index a9001bb64..000000000 Binary files a/public/img/default-expressions/admiration.png and /dev/null differ diff --git a/public/img/default-expressions/amusement.png b/public/img/default-expressions/amusement.png deleted file mode 100644 index 493880a8a..000000000 Binary files a/public/img/default-expressions/amusement.png and /dev/null differ diff --git a/public/img/default-expressions/anger.png b/public/img/default-expressions/anger.png deleted file mode 100644 index 6d7398d5b..000000000 Binary files a/public/img/default-expressions/anger.png and /dev/null differ diff --git a/public/img/default-expressions/annoyance.png b/public/img/default-expressions/annoyance.png deleted file mode 100644 index 1c3c20e6e..000000000 Binary files a/public/img/default-expressions/annoyance.png and /dev/null differ diff --git a/public/img/default-expressions/approval.png b/public/img/default-expressions/approval.png deleted file mode 100644 index db2fd7fc1..000000000 Binary files a/public/img/default-expressions/approval.png and /dev/null differ diff --git a/public/img/default-expressions/caring.png b/public/img/default-expressions/caring.png deleted file mode 100644 index 676794920..000000000 Binary files a/public/img/default-expressions/caring.png and /dev/null differ diff --git a/public/img/default-expressions/confusion.png b/public/img/default-expressions/confusion.png deleted file mode 100644 index b57949cb3..000000000 Binary files a/public/img/default-expressions/confusion.png and /dev/null differ diff --git a/public/img/default-expressions/curiosity.png b/public/img/default-expressions/curiosity.png deleted file mode 100644 index e0d4061c8..000000000 Binary files a/public/img/default-expressions/curiosity.png and /dev/null differ diff --git a/public/img/default-expressions/desire.png b/public/img/default-expressions/desire.png deleted file mode 100644 index 98b88fb6f..000000000 Binary files a/public/img/default-expressions/desire.png and /dev/null differ diff --git a/public/img/default-expressions/desire1.png b/public/img/default-expressions/desire1.png deleted file mode 100644 index d4c6964b6..000000000 Binary files a/public/img/default-expressions/desire1.png and /dev/null differ diff --git a/public/img/default-expressions/desire2.png b/public/img/default-expressions/desire2.png deleted file mode 100644 index fd31e6b19..000000000 Binary files a/public/img/default-expressions/desire2.png and /dev/null differ diff --git a/public/img/default-expressions/disappointment.png b/public/img/default-expressions/disappointment.png deleted file mode 100644 index a2fbb03af..000000000 Binary files a/public/img/default-expressions/disappointment.png and /dev/null differ diff --git a/public/img/default-expressions/disapproval.png b/public/img/default-expressions/disapproval.png deleted file mode 100644 index cb14abbf4..000000000 Binary files a/public/img/default-expressions/disapproval.png and /dev/null differ diff --git a/public/img/default-expressions/disgust.png b/public/img/default-expressions/disgust.png deleted file mode 100644 index bbb6dc5ff..000000000 Binary files a/public/img/default-expressions/disgust.png and /dev/null differ diff --git a/public/img/default-expressions/embarrassment.png b/public/img/default-expressions/embarrassment.png deleted file mode 100644 index 5481a5c45..000000000 Binary files a/public/img/default-expressions/embarrassment.png and /dev/null differ diff --git a/public/img/default-expressions/excitement.png b/public/img/default-expressions/excitement.png deleted file mode 100644 index 3ba87d41d..000000000 Binary files a/public/img/default-expressions/excitement.png and /dev/null differ diff --git a/public/img/default-expressions/fear.png b/public/img/default-expressions/fear.png deleted file mode 100644 index c1ada3db9..000000000 Binary files a/public/img/default-expressions/fear.png and /dev/null differ diff --git a/public/img/default-expressions/gratitude.png b/public/img/default-expressions/gratitude.png deleted file mode 100644 index e304a102d..000000000 Binary files a/public/img/default-expressions/gratitude.png and /dev/null differ diff --git a/public/img/default-expressions/grief.png b/public/img/default-expressions/grief.png deleted file mode 100644 index ae97d3486..000000000 Binary files a/public/img/default-expressions/grief.png and /dev/null differ diff --git a/public/img/default-expressions/joy.png b/public/img/default-expressions/joy.png deleted file mode 100644 index 939a8760c..000000000 Binary files a/public/img/default-expressions/joy.png and /dev/null differ diff --git a/public/img/default-expressions/love.png b/public/img/default-expressions/love.png deleted file mode 100644 index 8c0556fd7..000000000 Binary files a/public/img/default-expressions/love.png and /dev/null differ diff --git a/public/img/default-expressions/nervousness.png b/public/img/default-expressions/nervousness.png deleted file mode 100644 index d08554eed..000000000 Binary files a/public/img/default-expressions/nervousness.png and /dev/null differ diff --git a/public/img/default-expressions/neutral.png b/public/img/default-expressions/neutral.png deleted file mode 100644 index 61c65b4d2..000000000 Binary files a/public/img/default-expressions/neutral.png and /dev/null differ diff --git a/public/img/default-expressions/optimism.png b/public/img/default-expressions/optimism.png deleted file mode 100644 index fab101a79..000000000 Binary files a/public/img/default-expressions/optimism.png and /dev/null differ diff --git a/public/img/default-expressions/pride.png b/public/img/default-expressions/pride.png deleted file mode 100644 index 16dae6fca..000000000 Binary files a/public/img/default-expressions/pride.png and /dev/null differ diff --git a/public/img/default-expressions/realization.png b/public/img/default-expressions/realization.png deleted file mode 100644 index cc8738986..000000000 Binary files a/public/img/default-expressions/realization.png and /dev/null differ diff --git a/public/img/default-expressions/relief.png b/public/img/default-expressions/relief.png deleted file mode 100644 index 8731cd635..000000000 Binary files a/public/img/default-expressions/relief.png and /dev/null differ diff --git a/public/img/default-expressions/remorse.png b/public/img/default-expressions/remorse.png deleted file mode 100644 index abf7c2623..000000000 Binary files a/public/img/default-expressions/remorse.png and /dev/null differ diff --git a/public/img/default-expressions/sadness.png b/public/img/default-expressions/sadness.png deleted file mode 100644 index bcba564aa..000000000 Binary files a/public/img/default-expressions/sadness.png and /dev/null differ diff --git a/public/img/default-expressions/surprise.png b/public/img/default-expressions/surprise.png deleted file mode 100644 index a45a8dab9..000000000 Binary files a/public/img/default-expressions/surprise.png and /dev/null differ diff --git a/public/img/five.png b/public/img/five.png deleted file mode 100644 index 04a8422e7..000000000 Binary files a/public/img/five.png and /dev/null differ diff --git a/public/img/quill.png b/public/img/quill.png deleted file mode 100644 index 8edd69153..000000000 Binary files a/public/img/quill.png and /dev/null differ diff --git a/public/img/times-circle.svg b/public/img/times-circle.svg deleted file mode 100644 index cdee94147..000000000 --- a/public/img/times-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/index.html b/public/index.html index 46f1f58c5..140b8ec81 100644 --- a/public/index.html +++ b/public/index.html @@ -3403,6 +3403,7 @@
+
diff --git a/public/script.js b/public/script.js index 97b22af2c..d5dcd3b2b 100644 --- a/public/script.js +++ b/public/script.js @@ -5577,6 +5577,59 @@ async function messageEditDone(div) { await saveChatConditional(); } +/** + * Fetches the chat content for each chat file from the server and compiles them into a dictionary. + * The function iterates over a provided list of chat metadata and requests the actual chat content + * for each chat, either as an individual chat or a group chat based on the context. + * + * @param {Array} data - An array containing metadata about each chat such as file_name. + * @param {boolean} isGroupChat - A flag indicating if the chat is a group chat. + * @returns {Object} chat_dict - A dictionary where each key is a file_name and the value is the + * corresponding chat content fetched from the server. + */ +export async function getChatsFromFiles(data, isGroupChat) { + const context = getContext(); + let chat_dict = {}; + let chat_list = Object.values(data).sort((a, b) => a["file_name"].localeCompare(b["file_name"])).reverse(); + + for (const { file_name } of chat_list) { + try { + const endpoint = isGroupChat ? '/getgroupchat' : '/getchat'; + const requestBody = isGroupChat + ? JSON.stringify({ id: file_name }) + : JSON.stringify({ + ch_name: characters[context.characterId].name, + file_name: file_name.replace('.jsonl', ''), + avatar_url: characters[context.characterId].avatar + }); + + const chatResponse = await fetch(endpoint, { + method: 'POST', + headers: getRequestHeaders(), + body: requestBody, + cache: 'no-cache', + }); + + if (!chatResponse.ok) { + continue; + } + + const currentChat = await chatResponse.json(); + if (!isGroupChat) { + // remove the first message, which is metadata, only for individual chats + currentChat.shift(); + } + chat_dict[file_name] = currentChat; + + } catch (error) { + console.error(error); + } + } + + return chat_dict; +} + + async function getPastCharacterChats() { const response = await fetch("/getallchatsofcharacter", { method: 'POST', @@ -5594,6 +5647,12 @@ async function getPastCharacterChats() { return data; } +/** + * Displays the past chats for a character or a group based on the selected context. + * The function first fetches the chats, processes them, and then displays them in + * the HTML. It also has a built-in search functionality that allows filtering the + * displayed chats based on a search query. + */ export async function displayPastChats() { $("#select_chat_div").empty(); @@ -5602,45 +5661,70 @@ export async function displayPastChats() { const currentChat = selected_group ? group?.chat_id : characters[this_chid]["chat"]; const displayName = selected_group ? group?.name : characters[this_chid].name; const avatarImg = selected_group ? group?.avatar_url : getThumbnailUrl('avatar', characters[this_chid]['avatar']); - + const rawChats = await getChatsFromFiles(data, selected_group); // Sort by last message date descending data.sort((a, b) => sortMoments(timestampToMoment(a.last_mes), timestampToMoment(b.last_mes))); - + console.log(data); $("#load_select_chat_div").css("display", "none"); $("#ChatHistoryCharName").text(displayName); - for (const key in data) { - let strlen = 300; - let mes = data[key]["mes"]; - if (mes !== undefined) { - if (mes.length > strlen) { - mes = "..." + mes.substring(mes.length - strlen); - } - const chat_items = data[key]["chat_items"]; - const file_size = data[key]["file_size"]; - const fileName = data[key]['file_name']; - const timestamp = timestampToMoment(data[key]['last_mes']).format('LL LT'); - const template = $('#past_chat_template .select_chat_block_wrapper').clone(); - template.find('.select_chat_block').attr('file_name', fileName); - template.find('.avatar img').attr('src', avatarImg); - template.find('.select_chat_block_filename').text(fileName); - template.find('.chat_file_size').text(" (" + file_size + ")"); - template.find('.chat_messages_num').text(" (" + chat_items + " messages)"); - template.find('.select_chat_block_mes').text(mes); - template.find('.PastChat_cross').attr('file_name', fileName); - template.find('.chat_messages_date').text(timestamp); + const displayChats = (searchQuery) => { + $("#select_chat_div").empty(); // Clear the current chats before appending filtered chats - if (selected_group) { - template.find('.avatar img').replaceWith(getGroupAvatar(group)); - } + const filteredData = data.filter(chat => { + const fileName = chat['file_name']; + const chatContent = rawChats[fileName]; - $("#select_chat_div").append(template); + return chatContent && Object.values(chatContent).some(message => message.mes.toLowerCase().includes(searchQuery.toLowerCase())); + }); - if (currentChat === fileName.toString().replace(".jsonl", "")) { - $("#select_chat_div").find(".select_chat_block:last").attr("highlight", true); + console.log(filteredData); + for (const key in filteredData) { + let strlen = 300; + let mes = filteredData[key]["mes"]; + + if (mes !== undefined) { + if (mes.length > strlen) { + mes = "..." + mes.substring(mes.length - strlen); + } + const chat_items = data[key]["chat_items"]; + const file_size = data[key]["file_size"]; + const fileName = data[key]['file_name']; + const timestamp = timestampToMoment(data[key]['last_mes']).format('LL LT'); + const template = $('#past_chat_template .select_chat_block_wrapper').clone(); + template.find('.select_chat_block').attr('file_name', fileName); + template.find('.avatar img').attr('src', avatarImg); + template.find('.select_chat_block_filename').text(fileName); + template.find('.chat_file_size').text(" (" + file_size + ")"); + template.find('.chat_messages_num').text(" (" + chat_items + " messages)"); + template.find('.select_chat_block_mes').text(mes); + template.find('.PastChat_cross').attr('file_name', fileName); + template.find('.chat_messages_date').text(timestamp); + + if (selected_group) { + template.find('.avatar img').replaceWith(getGroupAvatar(group)); + } + + $("#select_chat_div").append(template); + + if (currentChat === fileName.toString().replace(".jsonl", "")) { + $("#select_chat_div").find(".select_chat_block:last").attr("highlight", true); + } } } + } + displayChats(''); // Display all by default + + const debouncedDisplay = debounce((searchQuery) => { + displayChats(searchQuery); + }, 300); + + // Define the search input listener + $("#select_chat_search").on("input", function () { + const searchQuery = $(this).val(); + debouncedDisplay(searchQuery); + }); } //************************************************************ diff --git a/public/style.css b/public/style.css index 535aa5768..666464049 100644 --- a/public/style.css +++ b/public/style.css @@ -5684,3 +5684,16 @@ body.waifuMode .zoomed_avatar { font-size: calc(var(--mainFontSize) * .8); font-weight: bold; } + +#select_chat_search { + background-color: transparent; + border: none; + outline: none; + color: white; + display: inline-block; /* Change display to inline-block */ + vertical-align: middle; /* Align to middle if there's a height discrepancy */ + width: 200px; + font-size: 16px; + z-index: 10; + margin-left: 10px; /* Give some space between the button and search box */ +} \ No newline at end of file