diff --git a/src/lib/Chat.svelte b/src/lib/Chat.svelte index 418c53e..1262bf7 100644 --- a/src/lib/Chat.svelte +++ b/src/lib/Chat.svelte @@ -115,6 +115,10 @@ chatRequest = new ChatRequest() chatRequest.setChat(chat) + + chat.lastAccess = Date.now() + saveChatStore() + // Focus the input on mount focusInput() diff --git a/src/lib/Settings.svelte b/src/lib/Settings.svelte index 3ff88c7..c20897b 100644 --- a/src/lib/Settings.svelte +++ b/src/lib/Settings.svelte @@ -105,6 +105,15 @@ export const imageGenerationSizes = [ export const imageGenerationSizeTypes = ['', ...imageGenerationSizes] +export const chatSortOptions = [ + { value: 'name', text: 'Name' }, + { value: 'created', text: 'Created' }, + { value: 'updated', text: 'Last Use' }, + { value: 'lastAccess', text: 'Last View' } +] + +export const chatSortOptionsKeys = chatSortOptions.map(o => o.value, [] as string[]) + const profileSetting: ChatSetting & SettingSelect = { key: 'profile', name: 'Profile', diff --git a/src/lib/Sidebar.svelte b/src/lib/Sidebar.svelte index 3f8d1d4..7c8132c 100644 --- a/src/lib/Sidebar.svelte +++ b/src/lib/Sidebar.svelte @@ -9,7 +9,7 @@ import { clickOutside } from 'svelte-use-click-outside' import { startNewChatWithWarning } from './Util.svelte' - $: sortedChats = $chatsStorage.sort((a, b) => b.id - a.id) + $: sortedChats = $chatsStorage.sort((a, b) => ((b.created || 0) - (a.created || 0)) || (b.id - a.id)) $: activeChatId = $params && $params.chatId ? parseInt($params.chatId) : undefined diff --git a/src/lib/Storage.svelte b/src/lib/Storage.svelte index 034dd9c..fea3858 100644 --- a/src/lib/Storage.svelte +++ b/src/lib/Storage.svelte @@ -52,7 +52,10 @@ messages: [], usage: {} as Record, startSession: false, - sessionStarted: false + sessionStarted: false, + created: Date.now(), + updated: Date.now(), + lastAccess: Date.now() }) chatsStorage.set(chats) // Apply defaults and prepare it to start @@ -79,6 +82,7 @@ } chat.id = chatId + chat.created = Date.now() // Make sure images are moved to indexedDB store, // else they would clobber local storage @@ -252,7 +256,9 @@ }, 200) } else { clearTimeout(setMessagesTimers[chatId]) - getChat(chatId).messages = messages + const chat = getChat(chatId) + chat.updated = Date.now() + chat.messages = messages saveChatStore() } } @@ -268,6 +274,7 @@ export const addMessage = (chatId: number, message: Message) => { const messages = getMessages(chatId) if (!message.uuid) message.uuid = uuidv4() + if (!message.created) message.created = Date.now() if (messages.indexOf(message) < 0) { // Don't have message, add it messages[messages.length] = message @@ -286,7 +293,10 @@ console.error("Couldn't insert after message:", insertAfter) return } - newMessages.forEach(m => { m.uuid = m.uuid || uuidv4() }) + newMessages.forEach(m => { + m.uuid = m.uuid || uuidv4() + m.created = m.created || Date.now() + }) messages.splice(index + 1, 0, ...newMessages) setMessages(chatId, messages.filter(m => true)) } diff --git a/src/lib/Types.svelte b/src/lib/Types.svelte index be81424..9bc4422 100644 --- a/src/lib/Types.svelte +++ b/src/lib/Types.svelte @@ -1,11 +1,13 @@