89 lines
1.9 KiB
JavaScript
89 lines
1.9 KiB
JavaScript
function load_events(damus) {
|
|
if (!('event_cache' in localStorage))
|
|
return {}
|
|
const cached = JSON.parse(localStorage.getItem('event_cache'))
|
|
|
|
return cached.reduce((obj, ev) => {
|
|
obj[ev.id] = ev
|
|
process_event(damus, ev)
|
|
return obj
|
|
}, {})
|
|
}
|
|
|
|
function load_cache(damus) {
|
|
damus.all_events = load_events(damus)
|
|
load_timelines(damus)
|
|
}
|
|
|
|
function save_cache(damus) {
|
|
save_events(damus)
|
|
save_timelines(damus)
|
|
}
|
|
|
|
function save_events(damus)
|
|
{
|
|
const keys = Object.keys(damus.all_events)
|
|
const MAX_KINDS = {
|
|
1: 2000,
|
|
0: 2000,
|
|
|
|
6: 100,
|
|
4: 100,
|
|
5: 100,
|
|
7: 100,
|
|
}
|
|
|
|
let counts = {}
|
|
|
|
let cached = keys.map((key) => {
|
|
const ev = damus.all_events[key]
|
|
const {sig, pubkey, content, tags, kind, created_at, id} = ev
|
|
return {sig, pubkey, content, tags, kind, created_at, id}
|
|
})
|
|
|
|
cached.sort((a,b) => b.created_at - a.created_at)
|
|
cached = cached.reduce((cs, ev) => {
|
|
counts[ev.kind] = (counts[ev.kind] || 0)+1
|
|
if (counts[ev.kind] < MAX_KINDS[ev.kind])
|
|
cs.push(ev)
|
|
return cs
|
|
}, [])
|
|
|
|
log_debug('saving all events to local storage', cached.length)
|
|
|
|
localStorage.setItem('event_cache', JSON.stringify(cached))
|
|
}
|
|
|
|
function save_timelines(damus)
|
|
{
|
|
const views = Object.keys(damus.views).reduce((obj, view_name) => {
|
|
const view = damus.views[view_name]
|
|
obj[view_name] = view.events.map(e => e.id).slice(0,100)
|
|
return obj
|
|
}, {})
|
|
localStorage.setItem('views', JSON.stringify(views))
|
|
}
|
|
|
|
function load_timelines(damus)
|
|
{
|
|
if (!('views' in localStorage))
|
|
return
|
|
const stored_views = JSON.parse(localStorage.getItem('views'))
|
|
for (const view_name of Object.keys(damus.views)) {
|
|
const view = damus.views[view_name]
|
|
view.events = (stored_views[view_name] || []).reduce((evs, evid) => {
|
|
const ev = damus.all_events[evid]
|
|
if (ev) evs.push(ev)
|
|
return evs
|
|
}, [])
|
|
}
|
|
}
|
|
|
|
function schedule_save_events(damus)
|
|
{
|
|
if (damus.save_timer)
|
|
clearTimeout(damus.save_timer)
|
|
damus.save_timer = setTimeout(save_cache.bind(null, damus), 3000)
|
|
}
|
|
|
|
|