mirror of
https://github.com/multipleof4/sune.git
synced 2026-01-14 00:27:56 +00:00
Feat: Extract THREAD object
This commit is contained in:
16
src/thread.js
Normal file
16
src/thread.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { state } from './state.js'
|
||||||
|
import { titleFrom } from './utils.js'
|
||||||
|
import { renderThreads } from './ui.js'
|
||||||
|
import { el } from './dom.js'
|
||||||
|
|
||||||
|
const TKEY='threads_v1'
|
||||||
|
export const THREAD={
|
||||||
|
list:[],
|
||||||
|
load:async function(){this.list=await localforage.getItem(TKEY).then(v=>Array.isArray(v)?v:[])||[]},
|
||||||
|
save:async function(){await localforage.setItem(TKEY,this.list)},
|
||||||
|
get:function(id){return this.list.find(t=>t.id===id)},
|
||||||
|
get active(){return this.get(state.currentThreadId)},
|
||||||
|
persist:async function(full=true){if(!state.currentThreadId)return;const th=this.active;if(!th)return;th.messages=[...state.messages];if(full){th.updatedAt=Date.now()}await this.save();if(full)await renderThreads()},
|
||||||
|
setTitle:async function(id,title){const th=this.get(id);if(!th||!title)return;th.title=titleFrom(title);th.updatedAt=Date.now();await this.save();await renderThreads()},
|
||||||
|
getLastAssistantMessageId:()=>{const a=[...el.messages.querySelectorAll('.msg-bubble')];for(let i=a.length-1;i>=0;i--){const b=a[i],h=b.previousElementSibling;if(!h)continue;if(!/^\s*You\b/.test(h.textContent||''))return b.dataset.mid||null}return null}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user