pinafore/routes/_utils/mastodon/timelines.js

62 lines
1.7 KiB
JavaScript
Raw Normal View History

2018-01-19 04:25:34 +00:00
import { get, paramsString } from '../ajax'
import { basename } from './utils'
2018-01-19 04:25:34 +00:00
2018-01-23 05:16:27 +00:00
function getTimelineUrlPath(timeline) {
2018-01-22 04:02:32 +00:00
switch (timeline) {
case 'local':
case 'federated':
2018-01-23 05:16:27 +00:00
return 'timelines/public'
2018-01-22 04:02:32 +00:00
case 'home':
2018-01-23 05:16:27 +00:00
return 'timelines/home'
}
if (timeline.startsWith('tag/')) {
return 'timelines/tag'
2018-01-28 23:44:33 +00:00
} else if (timeline.startsWith('status/')) {
return 'statuses'
2018-01-23 05:16:27 +00:00
} else if (timeline.startsWith('account/')) {
return 'accounts'
2018-01-22 04:02:32 +00:00
}
}
2018-01-19 07:37:43 +00:00
export function getTimeline(instanceName, accessToken, timeline, maxId, since) {
2018-01-23 05:16:27 +00:00
let timelineUrlName = getTimelineUrlPath(timeline)
let url = `${basename(instanceName)}/api/v1/${timelineUrlName}`
2018-01-19 04:25:34 +00:00
2018-01-22 04:02:32 +00:00
if (timeline.startsWith('tag/')) {
url += '/' + timeline.split('/').slice(-1)[0]
2018-01-28 23:44:33 +00:00
} else if (timeline.startsWith('status/')) {
url += '/' + timeline.split('/').slice(-1)[0] + '/context'
2018-01-23 05:16:27 +00:00
} else if (timeline.startsWith('account/')) {
url += '/' + timeline.split('/').slice(-1)[0] +'/statuses'
2018-01-22 04:02:32 +00:00
}
2018-01-19 04:25:34 +00:00
let params = {}
if (since) {
params.since = since
}
if (maxId) {
params.max_id = maxId
}
2018-01-19 07:37:43 +00:00
if (timeline === 'local') {
params.local = true
}
2018-01-19 04:25:34 +00:00
url += '?' + paramsString(params)
2018-01-28 23:44:33 +00:00
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([
get(url, {'Authorization': `Bearer ${accessToken}`}),
get(statusUrl, {'Authorization': `Bearer ${accessToken}`})
]).then(res => {
return [].concat(res[0].ancestors).concat([res[1]]).concat(res[0].descendants)
})
}
2018-01-19 04:25:34 +00:00
return get(url, {
'Authorization': `Bearer ${accessToken}`
})
}