1
0
mirror of https://github.com/nolanlawson/pinafore synced 2025-01-28 20:49:44 +01:00

98 lines
3.5 KiB
JavaScript
Raw Normal View History

2018-01-28 13:09:39 -08:00
import { store } from '../_store/store'
2018-02-08 08:22:14 -08:00
import { database } from '../_database/database'
import { getTimeline } from '../_api/timelines'
2018-01-27 17:34:08 -08:00
import { toast } from '../_utils/toast'
import { mark, stop } from '../_utils/marks'
2018-01-28 15:02:02 -08:00
import { mergeArrays } from '../_utils/arrays'
2018-01-27 17:34:08 -08:00
const FETCH_LIMIT = 20
2018-02-08 22:29:29 -08:00
async function fetchTimelineItems (instanceName, accessToken, timelineName, lastTimelineItemId, online) {
mark('fetchTimelineItems')
let items
2018-01-27 17:34:08 -08:00
if (!online) {
items = await database.getTimeline(instanceName, timelineName, lastTimelineItemId, FETCH_LIMIT)
2018-01-27 17:34:08 -08:00
} else {
try {
items = await getTimeline(instanceName, accessToken, timelineName, lastTimelineItemId, FETCH_LIMIT)
/* no await */ database.insertTimelineItems(instanceName, timelineName, items)
2018-01-27 17:34:08 -08:00
} catch (e) {
console.error(e)
toast.say('Internet request failed. Showing offline content.')
items = await database.getTimeline(instanceName, timelineName, lastTimelineItemId, FETCH_LIMIT)
2018-01-27 17:34:08 -08:00
}
}
stop('fetchTimelineItems')
return items
2018-01-27 17:34:08 -08:00
}
2018-02-08 22:29:29 -08:00
async function addTimelineItems (instanceName, timelineName, newItems) {
console.log('addTimelineItems, length:', newItems.length)
mark('addTimelineItems')
let newIds = newItems.map(item => item.id)
2018-02-11 13:46:57 -08:00
addTimelineItemIds(instanceName, timelineName, newIds)
stop('addTimelineItems')
}
export async function addTimelineItemIds (instanceName, timelineName, newIds) {
let oldIds = store.getForTimeline(instanceName, timelineName, 'timelineItemIds') || []
let merged = mergeArrays(oldIds, newIds)
store.setForTimeline(instanceName, timelineName, { timelineItemIds: merged })
2018-01-27 17:34:08 -08:00
}
2018-02-08 22:29:29 -08:00
async function fetchTimelineItemsAndPossiblyFallBack () {
mark('fetchTimelineItemsAndPossiblyFallBack')
2018-01-27 17:34:08 -08:00
let timelineName = store.get('currentTimeline')
let instanceName = store.get('currentInstance')
let accessToken = store.get('accessToken')
let lastTimelineItemId = store.get('lastTimelineItemId')
2018-01-27 17:34:08 -08:00
let online = store.get('online')
let newItems = await fetchTimelineItems(instanceName, accessToken, timelineName, lastTimelineItemId, online)
addTimelineItems(instanceName, timelineName, newItems)
stop('fetchTimelineItemsAndPossiblyFallBack')
2018-01-27 17:34:08 -08:00
}
2018-02-08 22:29:29 -08:00
export function initializeTimeline () {
2018-01-27 17:34:08 -08:00
mark('initializeTimeline')
let instanceName = store.get('currentInstance')
let timeline = store.get('currentTimeline')
requestAnimationFrame(() => {
requestAnimationFrame(() => {
2018-02-11 16:10:39 -08:00
console.log('initialized')
2018-01-27 17:34:08 -08:00
store.setForTimeline(instanceName, timeline, {initialized: true})
})
})
stop('initializeTimeline')
}
2018-02-08 22:29:29 -08:00
export async function setupTimeline () {
mark('setupTimeline')
2018-02-08 18:54:48 -08:00
if (!store.get('timelineItemIds')) {
await fetchTimelineItemsAndPossiblyFallBack()
2018-01-27 17:34:08 -08:00
}
stop('setupTimeline')
2018-01-27 17:34:08 -08:00
}
2018-02-08 22:29:29 -08:00
export async function fetchTimelineItemsOnScrollToBottom () {
2018-01-27 17:34:08 -08:00
let timelineName = store.get('currentTimeline')
let instanceName = store.get('currentInstance')
store.setForTimeline(instanceName, timelineName, { runningUpdate: true })
await fetchTimelineItemsAndPossiblyFallBack()
2018-01-27 17:34:08 -08:00
store.setForTimeline(instanceName, timelineName, { runningUpdate: false })
2018-02-08 22:29:29 -08:00
}
2018-02-11 19:15:21 -08:00
2018-02-13 19:35:46 -08:00
export async function showMoreItemsForCurrentTimeline () {
mark('showMoreItemsForCurrentTimeline')
2018-02-11 19:15:21 -08:00
let instanceName = store.get('currentInstance')
let timelineName = store.get('currentTimeline')
let itemIdsToAdd = store.get('itemIdsToAdd')
addTimelineItemIds(instanceName, timelineName, itemIdsToAdd)
store.setForTimeline(instanceName, timelineName, {
itemIdsToAdd: [],
shouldShowHeader: false,
showHeader: false
})
stop('showMoreItemsForCurrentTimeline')
2018-02-13 19:35:46 -08:00
}