2018-02-24 02:23:36 +00:00
|
|
|
import { getWithTimeout, paramsString } from '../_utils/ajax'
|
2018-02-24 22:49:28 +00:00
|
|
|
import { auth, basename } from './utils'
|
2018-01-19 04:25:34 +00:00
|
|
|
|
2018-02-09 06:29:29 +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'
|
2018-02-04 02:06:02 +00:00
|
|
|
case 'notifications':
|
|
|
|
return 'notifications'
|
2018-02-08 06:49:50 +00:00
|
|
|
case 'favorites':
|
|
|
|
return 'favourites'
|
2018-01-23 05:16:27 +00:00
|
|
|
}
|
|
|
|
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-02-08 17:15:25 +00:00
|
|
|
} else if (timeline.startsWith('list/')) {
|
|
|
|
return 'timelines/list'
|
2018-01-22 04:02:32 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-02-09 06:29:29 +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/')) {
|
2018-02-08 17:15:25 +00:00
|
|
|
url += '/' + timeline.split('/').slice(-1)[0] + '/statuses'
|
|
|
|
} else if (timeline.startsWith('list/')) {
|
|
|
|
url += '/' + timeline.split('/').slice(-1)[0]
|
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
|
2018-04-09 17:29:15 +01:00
|
|
|
let statusUrl = `${basename(instanceName)}/api/v1/statuses/${timeline.split('/').slice(-1)[0]}`
|
2018-01-28 23:44:33 +00:00
|
|
|
return Promise.all([
|
2018-02-24 22:49:28 +00:00
|
|
|
getWithTimeout(url, auth(accessToken)),
|
|
|
|
getWithTimeout(statusUrl, auth(accessToken))
|
2018-01-28 23:44:33 +00:00
|
|
|
]).then(res => {
|
|
|
|
return [].concat(res[0].ancestors).concat([res[1]]).concat(res[0].descendants)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-02-24 22:49:28 +00:00
|
|
|
return getWithTimeout(url, auth(accessToken))
|
2018-02-09 06:29:29 +00:00
|
|
|
}
|