Revert "some initial work to make it possible to use "unregistered" timelines, i.e. not"

and some stuff to make favorites still work

This reverts commit 039a407400.
This commit is contained in:
Henry Jameson 2019-01-17 21:46:03 +03:00
parent 0f8baff5a3
commit cab87744c8
6 changed files with 38 additions and 43 deletions

View file

@ -7,6 +7,7 @@ import { throttle } from 'lodash'
const Timeline = { const Timeline = {
props: [ props: [
'timeline', 'timeline',
'timelineName',
'title', 'title',
'userId', 'userId',
'tag', 'tag',
@ -54,7 +55,7 @@ const Timeline = {
timelineFetcher.fetchAndUpdate({ timelineFetcher.fetchAndUpdate({
store, store,
credentials, credentials,
timeline: this.timeline, timeline: this.timelineName,
showImmediately, showImmediately,
userId: this.userId, userId: this.userId,
tag: this.tag tag: this.tag
@ -69,32 +70,32 @@ const Timeline = {
destroyed () { destroyed () {
window.removeEventListener('scroll', this.scrollLoad) window.removeEventListener('scroll', this.scrollLoad)
if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false) if (typeof document.hidden !== 'undefined') document.removeEventListener('visibilitychange', this.handleVisibilityChange, false)
this.$store.commit('setLoading', { timeline: this.timeline, value: false }) this.$store.commit('setLoading', { timeline: this.timelineName, value: false })
}, },
methods: { methods: {
showNewStatuses () { showNewStatuses () {
if (this.timeline.flushMarker !== 0) { if (this.timeline.flushMarker !== 0) {
this.$store.commit('clearTimeline', { timeline: this.timeline }) this.$store.commit('clearTimeline', { timeline: this.timelineName })
this.$store.commit('queueFlush', { timeline: this.timeline, id: 0 }) this.$store.commit('queueFlush', { timeline: this.timelineName, id: 0 })
this.fetchOlderStatuses() this.fetchOlderStatuses()
} else { } else {
this.$store.commit('showNewStatuses', { timeline: this.timeline }) this.$store.commit('showNewStatuses', { timeline: this.timelineName })
this.paused = false this.paused = false
} }
}, },
fetchOlderStatuses: throttle(function () { fetchOlderStatuses: throttle(function () {
const store = this.$store const store = this.$store
const credentials = store.state.users.currentUser.credentials const credentials = store.state.users.currentUser.credentials
store.commit('setLoading', { timeline: this.timeline, value: true }) store.commit('setLoading', { timeline: this.timelineName, value: true })
timelineFetcher.fetchAndUpdate({ timelineFetcher.fetchAndUpdate({
store, store,
credentials, credentials,
timeline: this.timeline, timeline: this.timelineName,
older: true, older: true,
showImmediately: true, showImmediately: true,
userId: this.userId, userId: this.userId,
tag: this.tag tag: this.tag
}).then(() => store.commit('setLoading', { timeline: this.timeline, value: false })) }).then(() => store.commit('setLoading', { timeline: this.timelineName, value: false }))
}, 1000, this), }, 1000, this),
scrollLoad (e) { scrollLoad (e) {
const bodyBRect = document.body.getBoundingClientRect() const bodyBRect = document.body.getBoundingClientRect()

View file

@ -1,7 +1,6 @@
import UserCardContent from '../user_card_content/user_card_content.vue' import UserCardContent from '../user_card_content/user_card_content.vue'
import UserCard from '../user_card/user_card.vue' import UserCard from '../user_card/user_card.vue'
import Timeline from '../timeline/timeline.vue' import Timeline from '../timeline/timeline.vue'
import { emptyTl } from '../../modules/statuses.js'
const UserProfile = { const UserProfile = {
created () { created () {
@ -14,15 +13,13 @@ const UserProfile = {
destroyed () { destroyed () {
this.$store.dispatch('stopFetching', 'user') this.$store.dispatch('stopFetching', 'user')
}, },
data () {
return {
favorites: emptyTl({ type: 'favorites', userId: this.userId })
}
},
computed: { computed: {
timeline () { timeline () {
return this.$store.state.statuses.timelines.user return this.$store.state.statuses.timelines.user
}, },
favorites () {
return this.$store.state.statuses.timelines.favorites
},
userId () { userId () {
return this.$route.params.id || this.user.id return this.$route.params.id || this.user.id
}, },

View file

@ -5,7 +5,7 @@ import { Socket } from 'phoenix'
const api = { const api = {
state: { state: {
backendInteractor: backendInteractorService(), backendInteractor: backendInteractorService(),
fetchers: new Map(), fetchers: {},
socket: null, socket: null,
chatDisabled: false, chatDisabled: false,
followRequests: [] followRequests: []
@ -15,10 +15,10 @@ const api = {
state.backendInteractor = backendInteractor state.backendInteractor = backendInteractor
}, },
addFetcher (state, {timeline, fetcher}) { addFetcher (state, {timeline, fetcher}) {
state.fetchers.set(timeline, fetcher) state.fetchers[timeline] = fetcher
}, },
removeFetcher (state, {timeline}) { removeFetcher (state, {timeline}) {
delete state.fetchers.delete(timeline) delete state.fetchers[timeline]
}, },
setSocket (state, socket) { setSocket (state, socket) {
state.socket = socket state.socket = socket
@ -41,13 +41,13 @@ const api = {
} }
// Don't start fetching if we already are. // Don't start fetching if we already are.
if (!store.state.fetchers.has(timeline)) { if (!store.state.fetchers[timeline]) {
const fetcher = store.state.backendInteractor.startFetching({timeline, store, userId}) const fetcher = store.state.backendInteractor.startFetching({timeline, store, userId})
store.commit('addFetcher', {timeline, fetcher}) store.commit('addFetcher', {timeline, fetcher})
} }
}, },
stopFetching (store, timeline) { stopFetching (store, timeline) {
const fetcher = store.state.fetchers.get(timeline) const fetcher = store.state.fetchers[timeline]
window.clearInterval(fetcher) window.clearInterval(fetcher)
store.commit('removeFetcher', {timeline}) store.commit('removeFetcher', {timeline})
}, },

View file

@ -2,7 +2,7 @@ import { remove, slice, each, find, maxBy, minBy, merge, last, isArray } from 'l
import apiService from '../services/api/api.service.js' import apiService from '../services/api/api.service.js'
// import parse from '../services/status_parser/status_parser.js' // import parse from '../services/status_parser/status_parser.js'
export const emptyTl = (tl, userId = 0) => (Object.assign(tl, { const emptyTl = () => ({
statuses: [], statuses: [],
statusesObject: {}, statusesObject: {},
faves: [], faves: [],
@ -14,9 +14,9 @@ export const emptyTl = (tl, userId = 0) => (Object.assign(tl, {
loading: false, loading: false,
followers: [], followers: [],
friends: [], friends: [],
flushMarker: 0, userId: 0,
userId flushMarker: 0
})) })
export const defaultState = { export const defaultState = {
allStatuses: [], allStatuses: [],
@ -33,13 +33,14 @@ export const defaultState = {
favorites: new Set(), favorites: new Set(),
error: false, error: false,
timelines: { timelines: {
mentions: emptyTl({ type: 'mentions' }), mentions: emptyTl(),
public: emptyTl({ type: 'public' }), public: emptyTl(),
user: emptyTl({ type: 'user' }), // TODO: switch to unregistered user: emptyTl(),
publicAndExternal: emptyTl({ type: 'publicAndExternal' }), favorites: emptyTl(),
friends: emptyTl({ type: 'friends' }), publicAndExternal: emptyTl(),
tag: emptyTl({ type: 'tag' }), friends: emptyTl(),
dms: emptyTl({ type: 'dms' }) tag: emptyTl(),
dms: emptyTl()
} }
} }
@ -100,7 +101,7 @@ const addNewStatuses = (state, { statuses, showImmediately = false, timeline, us
const allStatuses = state.allStatuses const allStatuses = state.allStatuses
const allStatusesObject = state.allStatusesObject const allStatusesObject = state.allStatusesObject
const timelineObject = typeof timeline === 'object' ? timeline : state.timelines[timeline] const timelineObject = state.timelines[timeline]
const maxNew = statuses.length > 0 ? maxBy(statuses, 'id').id : 0 const maxNew = statuses.length > 0 ? maxBy(statuses, 'id').id : 0
const older = timeline && maxNew < timelineObject.maxId const older = timeline && maxNew < timelineObject.maxId
@ -297,7 +298,7 @@ export const mutations = {
addNewStatuses, addNewStatuses,
addNewNotifications, addNewNotifications,
showNewStatuses (state, { timeline }) { showNewStatuses (state, { timeline }) {
const oldTimeline = (typeof timeline === 'object' ? timeline : state.timelines[timeline]) const oldTimeline = (state.timelines[timeline])
oldTimeline.newStatusCount = 0 oldTimeline.newStatusCount = 0
oldTimeline.visibleStatuses = slice(oldTimeline.statuses, 0, 50) oldTimeline.visibleStatuses = slice(oldTimeline.statuses, 0, 50)
@ -306,8 +307,7 @@ export const mutations = {
each(oldTimeline.visibleStatuses, (status) => { oldTimeline.visibleStatusesObject[status.id] = status }) each(oldTimeline.visibleStatuses, (status) => { oldTimeline.visibleStatusesObject[status.id] = status })
}, },
clearTimeline (state, { timeline }) { clearTimeline (state, { timeline }) {
const timelineObject = typeof timeline === 'object' ? timeline : state.timelines[timeline] state.timelines[timeline] = emptyTl()
emptyTl(timelineObject, timeline.userId)
}, },
setFavorited (state, { status, value }) { setFavorited (state, { status, value }) {
const newStatus = state.allStatusesObject[status.id] const newStatus = state.allStatusesObject[status.id]
@ -327,8 +327,7 @@ export const mutations = {
newStatus.deleted = true newStatus.deleted = true
}, },
setLoading (state, { timeline, value }) { setLoading (state, { timeline, value }) {
const timelineObject = typeof timeline === 'object' ? timeline : state.timelines[timeline] state.timelines[timeline].loading = value
timelineObject.loading = value
}, },
setNsfw (state, { id, nsfw }) { setNsfw (state, { id, nsfw }) {
const newStatus = state.allStatusesObject[id] const newStatus = state.allStatusesObject[id]
@ -349,8 +348,7 @@ export const mutations = {
}) })
}, },
queueFlush (state, { timeline, id }) { queueFlush (state, { timeline, id }) {
const timelineObject = typeof timeline === 'object' ? timeline : state.timelines[timeline] state.timelines[timeline].flushMarker = id
timelineObject.flushMarker = id
} }
} }

View file

@ -327,11 +327,10 @@ const fetchTimeline = ({timeline, credentials, since = false, until = false, use
favorites: MASTODON_USER_FAVORITES_TIMELINE_URL, favorites: MASTODON_USER_FAVORITES_TIMELINE_URL,
tag: TAG_TIMELINE_URL tag: TAG_TIMELINE_URL
} }
const type = timeline.type || timeline const isNotifications = timeline === 'notifications'
const isNotifications = type === 'notifications'
const params = [] const params = []
let url = timelineUrls[type] let url = timelineUrls[timeline]
if (since) { if (since) {
params.push(['since_id', since]) params.push(['since_id', since])

View file

@ -3,7 +3,7 @@ import { camelCase } from 'lodash'
import apiService from '../api/api.service.js' import apiService from '../api/api.service.js'
const update = ({store, statuses, timeline, showImmediately, userId}) => { const update = ({store, statuses, timeline, showImmediately, userId}) => {
const ccTimeline = typeof timeline === 'object' ? timeline : camelCase(timeline) const ccTimeline = camelCase(timeline)
store.dispatch('setError', { value: false }) store.dispatch('setError', { value: false })
@ -18,7 +18,7 @@ const update = ({store, statuses, timeline, showImmediately, userId}) => {
const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false, showImmediately = false, userId = false, tag = false, until}) => { const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false, showImmediately = false, userId = false, tag = false, until}) => {
const args = { timeline, credentials } const args = { timeline, credentials }
const rootState = store.rootState || store.state const rootState = store.rootState || store.state
const timelineData = typeof timeline === 'object' ? timeline : rootState.statuses.timelines[camelCase(timeline)] const timelineData = rootState.statuses.timelines[camelCase(timeline)]
if (older) { if (older) {
args['until'] = until || timelineData.minVisibleId args['until'] = until || timelineData.minVisibleId