* upstream/develop: Add Korean translation Change emptlyTl to take userId better fix fixes #265 and also that thin line below gradient on chrome (UGH) fix #262 part of user profiles not being able to load previous posts Retain userId on clearing user timeline, don't flush when empty timeline
55 lines
1.9 KiB
JavaScript
55 lines
1.9 KiB
JavaScript
import { camelCase } from 'lodash'
|
|
|
|
import apiService from '../api/api.service.js'
|
|
|
|
const update = ({store, statuses, timeline, showImmediately, userId}) => {
|
|
const ccTimeline = typeof timeline === 'object' ? timeline : camelCase(timeline)
|
|
|
|
store.dispatch('setError', { value: false })
|
|
|
|
store.dispatch('addNewStatuses', {
|
|
timeline: ccTimeline,
|
|
userId,
|
|
statuses,
|
|
showImmediately
|
|
})
|
|
}
|
|
|
|
const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false, showImmediately = false, userId = false, tag = false, until}) => {
|
|
const args = { timeline, credentials }
|
|
const rootState = store.rootState || store.state
|
|
const timelineData = typeof timeline === 'object' ? timeline : rootState.statuses.timelines[camelCase(timeline)]
|
|
|
|
if (older) {
|
|
args['until'] = until || timelineData.minVisibleId
|
|
} else {
|
|
args['since'] = timelineData.maxId
|
|
}
|
|
|
|
args['userId'] = userId
|
|
args['tag'] = tag
|
|
|
|
return apiService.fetchTimeline(args)
|
|
.then((statuses) => {
|
|
if (!older && statuses.length >= 20 && !timelineData.loading && timelineData.statuses.length) {
|
|
store.dispatch('queueFlush', { timeline: timeline, id: timelineData.maxId })
|
|
}
|
|
update({store, statuses, timeline, showImmediately, userId})
|
|
}, () => store.dispatch('setError', { value: true }))
|
|
}
|
|
|
|
const startFetching = ({timeline = 'friends', credentials, store, userId = false, tag = false}) => {
|
|
const rootState = store.rootState || store.state
|
|
const timelineData = rootState.statuses.timelines[camelCase(timeline)]
|
|
const showImmediately = timelineData.visibleStatuses.length === 0
|
|
timelineData.userId = userId
|
|
fetchAndUpdate({timeline, credentials, store, showImmediately, userId, tag})
|
|
const boundFetchAndUpdate = () => fetchAndUpdate({ timeline, credentials, store, userId, tag })
|
|
return setInterval(boundFetchAndUpdate, 10000)
|
|
}
|
|
const timelineFetcher = {
|
|
fetchAndUpdate,
|
|
startFetching
|
|
}
|
|
|
|
export default timelineFetcher
|