import { getWithTimeout, paramsString } from '../_utils/ajax' import { auth, basename } from './utils' function getTimelineUrlPath (timeline) { switch (timeline) { case 'local': case 'federated': return 'timelines/public' case 'home': return 'timelines/home' case 'notifications': return 'notifications' case 'favorites': return 'favourites' } if (timeline.startsWith('tag/')) { return 'timelines/tag' } else if (timeline.startsWith('status/')) { return 'statuses' } else if (timeline.startsWith('account/')) { return 'accounts' } else if (timeline.startsWith('list/')) { return 'timelines/list' } } export function getTimeline (instanceName, accessToken, timeline, maxId, since) { let timelineUrlName = getTimelineUrlPath(timeline) let url = `${basename(instanceName)}/api/v1/${timelineUrlName}` if (timeline.startsWith('tag/')) { url += '/' + timeline.split('/').slice(-1)[0] } else if (timeline.startsWith('status/')) { url += '/' + timeline.split('/').slice(-1)[0] + '/context' } else if (timeline.startsWith('account/')) { url += '/' + timeline.split('/').slice(-1)[0] + '/statuses' } else if (timeline.startsWith('list/')) { url += '/' + timeline.split('/').slice(-1)[0] } let params = {} if (since) { params.since = since } if (maxId) { params.max_id = maxId } if (timeline === 'local') { params.local = true } url += '?' + paramsString(params) if (timeline.startsWith('status/')) { // special case - this is a list of descendents and ancestors let statusUrl = `${basename(instanceName)}/api/v1/statuses/${timeline.split('/').slice(-1)[0]}` return Promise.all([ getWithTimeout(url, auth(accessToken)), getWithTimeout(statusUrl, auth(accessToken)) ]).then(res => { return [].concat(res[0].ancestors).concat([res[1]]).concat(res[0].descendants) }) } return getWithTimeout(url, auth(accessToken)) }