.
This commit is contained in:
parent
191c02af1e
commit
4c2764c747
19 changed files with 2605 additions and 95 deletions
100
src/modules/statuses.js
Normal file
100
src/modules/statuses.js
Normal file
|
@ -0,0 +1,100 @@
|
|||
import { last, intersectionBy, sortBy, unionBy, toInteger, groupBy, differenceBy, each, find } from 'lodash'
|
||||
// import moment from 'moment'
|
||||
|
||||
const defaultState = {
|
||||
allStatuses: [],
|
||||
maxId: 0,
|
||||
timelines: {
|
||||
public: {
|
||||
statuses: [],
|
||||
faves: [],
|
||||
visibleStatuses: [],
|
||||
newStatusCount: 0,
|
||||
maxId: 0,
|
||||
minVisibleId: 0
|
||||
},
|
||||
publicAndExternal: {
|
||||
statuses: [],
|
||||
faves: [],
|
||||
visibleStatuses: [],
|
||||
newStatusCount: 0,
|
||||
maxId: 0,
|
||||
minVisibleId: 0
|
||||
},
|
||||
friends: {
|
||||
statuses: [],
|
||||
faves: [],
|
||||
visibleStatuses: [],
|
||||
newStatusCount: 0,
|
||||
maxId: 0,
|
||||
minVisibleId: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const statusType = (status) => {
|
||||
return !status.is_post_verb && status.uri.match(/fave/) ? 'fave' : 'status'
|
||||
}
|
||||
|
||||
const addStatusesToTimeline = (addedStatuses, showImmediately, { statuses, visibleStatuses, newStatusCount, faves }) => {
|
||||
const statusesAndFaves = groupBy(addedStatuses, statusType)
|
||||
const addedFaves = statusesAndFaves['fave'] || []
|
||||
const unseenFaves = differenceBy(addedFaves, faves, 'id')
|
||||
|
||||
// Update fave count
|
||||
each(unseenFaves, ({in_reply_to_status_id}) => {
|
||||
const status = find(statuses, { id: toInteger(in_reply_to_status_id) })
|
||||
if (status) {
|
||||
status.fave_num += 1
|
||||
}
|
||||
})
|
||||
|
||||
addedStatuses = statusesAndFaves['status'] || []
|
||||
|
||||
// Add some html to the statuses.
|
||||
each(addedStatuses, (status) => {
|
||||
const statusoid = status.retweeted_status || status
|
||||
if (statusoid.parsedText === undefined) {
|
||||
// statusoid.parsedText = statusParserService.parse(statusoid)
|
||||
statusoid.parsedText = statusoid.text
|
||||
}
|
||||
})
|
||||
|
||||
const newStatuses = sortBy(
|
||||
unionBy(addedStatuses, statuses, 'id'),
|
||||
({id}) => -id
|
||||
)
|
||||
|
||||
let newNewStatusCount = newStatusCount + (newStatuses.length - statuses.length)
|
||||
|
||||
let newVisibleStatuses = visibleStatuses
|
||||
|
||||
if (showImmediately) {
|
||||
newVisibleStatuses = unionBy(addedStatuses, newVisibleStatuses, 'id')
|
||||
newVisibleStatuses = sortBy(newVisibleStatuses, ({id}) => -id)
|
||||
newNewStatusCount = newStatusCount
|
||||
};
|
||||
|
||||
newVisibleStatuses = intersectionBy(newStatuses, newVisibleStatuses, 'id')
|
||||
|
||||
return {
|
||||
statuses: newStatuses,
|
||||
visibleStatuses: newVisibleStatuses,
|
||||
newStatusCount: newNewStatusCount,
|
||||
maxId: newStatuses[0].id,
|
||||
minVisibleId: last(newVisibleStatuses).id,
|
||||
faves: unionBy(faves, addedFaves, 'id')
|
||||
}
|
||||
}
|
||||
|
||||
const statuses = {
|
||||
state: defaultState,
|
||||
mutations: {
|
||||
addNewStatuses (state, { statuses, showImmediately = false, timeline }) {
|
||||
state.timelines[timeline] = addStatusesToTimeline(statuses, showImmediately, state.timelines[timeline])
|
||||
state.allStatuses = unionBy(state.timelines[timeline].statuses, state.allStatuses.id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default statuses
|
Loading…
Add table
Add a link
Reference in a new issue