refs #630 Handle delete event for local streaming
This commit is contained in:
parent
a1a4f581b1
commit
b99cb3b81f
|
@ -0,0 +1,154 @@
|
||||||
|
import { Account, Status, Application } from 'megalodon'
|
||||||
|
import Local, { LocalState, MUTATION_TYPES } from '@/store/TimelineSpace/Contents/Local'
|
||||||
|
|
||||||
|
const account: Account = {
|
||||||
|
id: '1',
|
||||||
|
username: 'h3poteto',
|
||||||
|
acct: 'h3poteto@pleroma.io',
|
||||||
|
display_name: 'h3poteto',
|
||||||
|
locked: false,
|
||||||
|
created_at: '2019-03-26T21:30:32',
|
||||||
|
followers_count: 10,
|
||||||
|
following_count: 10,
|
||||||
|
statuses_count: 100,
|
||||||
|
note: 'engineer',
|
||||||
|
url: 'https://pleroma.io',
|
||||||
|
avatar: '',
|
||||||
|
avatar_static: '',
|
||||||
|
header: '',
|
||||||
|
header_static: '',
|
||||||
|
emojis: [],
|
||||||
|
moved: null,
|
||||||
|
fields: null,
|
||||||
|
bot: false
|
||||||
|
}
|
||||||
|
const status1: Status = {
|
||||||
|
id: '1',
|
||||||
|
uri: 'http://example.com',
|
||||||
|
url: 'http://example.com',
|
||||||
|
account: account,
|
||||||
|
in_reply_to_id: null,
|
||||||
|
in_reply_to_account_id: null,
|
||||||
|
reblog: null,
|
||||||
|
content: 'hoge',
|
||||||
|
created_at: '2019-03-26T21:40:32',
|
||||||
|
emojis: [],
|
||||||
|
replies_count: 0,
|
||||||
|
reblogs_count: 0,
|
||||||
|
favourites_count: 0,
|
||||||
|
reblogged: null,
|
||||||
|
favourited: null,
|
||||||
|
muted: null,
|
||||||
|
sensitive: false,
|
||||||
|
spoiler_text: '',
|
||||||
|
visibility: 'public',
|
||||||
|
media_attachments: [],
|
||||||
|
mentions: [],
|
||||||
|
tags: [],
|
||||||
|
card: null,
|
||||||
|
application: {
|
||||||
|
name: 'Web'
|
||||||
|
} as Application,
|
||||||
|
language: null,
|
||||||
|
pinned: null
|
||||||
|
}
|
||||||
|
const status2: Status = {
|
||||||
|
id: '2',
|
||||||
|
uri: 'http://example.com',
|
||||||
|
url: 'http://example.com',
|
||||||
|
account: account,
|
||||||
|
in_reply_to_id: null,
|
||||||
|
in_reply_to_account_id: null,
|
||||||
|
reblog: null,
|
||||||
|
content: 'fuga',
|
||||||
|
created_at: '2019-03-26T21:40:32',
|
||||||
|
emojis: [],
|
||||||
|
replies_count: 0,
|
||||||
|
reblogs_count: 0,
|
||||||
|
favourites_count: 0,
|
||||||
|
reblogged: null,
|
||||||
|
favourited: null,
|
||||||
|
muted: null,
|
||||||
|
sensitive: false,
|
||||||
|
spoiler_text: '',
|
||||||
|
visibility: 'public',
|
||||||
|
media_attachments: [],
|
||||||
|
mentions: [],
|
||||||
|
tags: [],
|
||||||
|
card: null,
|
||||||
|
application: {
|
||||||
|
name: 'Web'
|
||||||
|
} as Application,
|
||||||
|
language: null,
|
||||||
|
pinned: null
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('TimelineSpace/Contents/Local', () => {
|
||||||
|
describe('mutations', () => {
|
||||||
|
let state: LocalState
|
||||||
|
|
||||||
|
describe('deleteToot', () => {
|
||||||
|
describe('message is not reblogged', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
state = {
|
||||||
|
lazyLoading: false,
|
||||||
|
heading: true,
|
||||||
|
timeline: [status2, status1],
|
||||||
|
unreadTimeline: [],
|
||||||
|
filter: ''
|
||||||
|
}
|
||||||
|
})
|
||||||
|
it('should be deleted', () => {
|
||||||
|
Local.mutations![MUTATION_TYPES.DELETE_TOOT](state, status1.id)
|
||||||
|
expect(state.timeline).toEqual([status2])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('message is reblogged', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
const rebloggedStatus: Status = {
|
||||||
|
id: '3',
|
||||||
|
uri: 'http://example.com',
|
||||||
|
url: 'http://example.com',
|
||||||
|
account: account,
|
||||||
|
in_reply_to_id: null,
|
||||||
|
in_reply_to_account_id: null,
|
||||||
|
reblog: status1,
|
||||||
|
content: '',
|
||||||
|
created_at: '2019-03-31T21:40:32',
|
||||||
|
emojis: [],
|
||||||
|
replies_count: 0,
|
||||||
|
reblogs_count: 0,
|
||||||
|
favourites_count: 0,
|
||||||
|
reblogged: null,
|
||||||
|
favourited: null,
|
||||||
|
muted: null,
|
||||||
|
sensitive: false,
|
||||||
|
spoiler_text: '',
|
||||||
|
visibility: 'public',
|
||||||
|
media_attachments: [],
|
||||||
|
mentions: [],
|
||||||
|
tags: [],
|
||||||
|
card: null,
|
||||||
|
application: {
|
||||||
|
name: 'Web'
|
||||||
|
} as Application,
|
||||||
|
language: null,
|
||||||
|
pinned: null
|
||||||
|
}
|
||||||
|
state = {
|
||||||
|
lazyLoading: false,
|
||||||
|
heading: true,
|
||||||
|
timeline: [status2, rebloggedStatus],
|
||||||
|
unreadTimeline: [],
|
||||||
|
filter: ''
|
||||||
|
}
|
||||||
|
})
|
||||||
|
it('should be deleted', () => {
|
||||||
|
Local.mutations![MUTATION_TYPES.DELETE_TOOT](state, status1.id)
|
||||||
|
expect(state.timeline).toEqual([status2])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
|
@ -144,7 +144,7 @@ export default {
|
||||||
this.$store.commit('TimelineSpace/Contents/Local/updateToot', message)
|
this.$store.commit('TimelineSpace/Contents/Local/updateToot', message)
|
||||||
},
|
},
|
||||||
deleteToot(message) {
|
deleteToot(message) {
|
||||||
this.$store.commit('TimelineSpace/Contents/Local/deleteToot', message)
|
this.$store.commit('TimelineSpace/Contents/Local/deleteToot', message.id)
|
||||||
},
|
},
|
||||||
onScroll(event) {
|
onScroll(event) {
|
||||||
if (event.target.clientHeight + event.target.scrollTop >= document.getElementById('local').clientHeight - 10 && !this.lazyloading) {
|
if (event.target.clientHeight + event.target.scrollTop >= document.getElementById('local').clientHeight - 10 && !this.lazyloading) {
|
||||||
|
|
|
@ -361,6 +361,9 @@ const actions: ActionTree<TimelineSpaceState, RootState> = {
|
||||||
}
|
}
|
||||||
commit('TimelineSpace/SideMenu/changeUnreadLocalTimeline', true, { root: true })
|
commit('TimelineSpace/SideMenu/changeUnreadLocalTimeline', true, { root: true })
|
||||||
})
|
})
|
||||||
|
ipcRenderer.on('delete-start-local-streaming', (_, id: string) => {
|
||||||
|
commit('TimelineSpace/Contents/Local/deleteToot', id, { root: true })
|
||||||
|
})
|
||||||
},
|
},
|
||||||
startLocalStreaming: ({ state }) => {
|
startLocalStreaming: ({ state }) => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
|
@ -3,10 +3,10 @@ import { Module, MutationTree, ActionTree } from 'vuex'
|
||||||
import { RootState } from '@/store'
|
import { RootState } from '@/store'
|
||||||
|
|
||||||
export interface LocalState {
|
export interface LocalState {
|
||||||
timeline: Array<Status>,
|
timeline: Array<Status>
|
||||||
unreadTimeline: Array<Status>,
|
unreadTimeline: Array<Status>
|
||||||
lazyLoading: boolean,
|
lazyLoading: boolean
|
||||||
heading: boolean,
|
heading: boolean
|
||||||
filter: string
|
filter: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,22 +46,22 @@ const mutations: MutationTree<LocalState> = {
|
||||||
[MUTATION_TYPES.UPDATE_TIMELINE]: (state, messages: Array<Status>) => {
|
[MUTATION_TYPES.UPDATE_TIMELINE]: (state, messages: Array<Status>) => {
|
||||||
state.timeline = messages
|
state.timeline = messages
|
||||||
},
|
},
|
||||||
[MUTATION_TYPES.MERGE_TIMELINE]: (state) => {
|
[MUTATION_TYPES.MERGE_TIMELINE]: state => {
|
||||||
state.timeline = state.unreadTimeline.slice(0, 80).concat(state.timeline)
|
state.timeline = state.unreadTimeline.slice(0, 80).concat(state.timeline)
|
||||||
state.unreadTimeline = []
|
state.unreadTimeline = []
|
||||||
},
|
},
|
||||||
[MUTATION_TYPES.INSERT_TIMELINE]: (state, messages: Array<Status>) => {
|
[MUTATION_TYPES.INSERT_TIMELINE]: (state, messages: Array<Status>) => {
|
||||||
state.timeline = state.timeline.concat(messages)
|
state.timeline = state.timeline.concat(messages)
|
||||||
},
|
},
|
||||||
[MUTATION_TYPES.ARCHIVE_TIMELINE]: (state) => {
|
[MUTATION_TYPES.ARCHIVE_TIMELINE]: state => {
|
||||||
state.timeline = state.timeline.slice(0, 40)
|
state.timeline = state.timeline.slice(0, 40)
|
||||||
},
|
},
|
||||||
[MUTATION_TYPES.CLEAR_TIMELINE]: (state) => {
|
[MUTATION_TYPES.CLEAR_TIMELINE]: state => {
|
||||||
state.timeline = []
|
state.timeline = []
|
||||||
state.unreadTimeline = []
|
state.unreadTimeline = []
|
||||||
},
|
},
|
||||||
[MUTATION_TYPES.UPDATE_TOOT]: (state, message: Status) => {
|
[MUTATION_TYPES.UPDATE_TOOT]: (state, message: Status) => {
|
||||||
state.timeline = state.timeline.map((toot) => {
|
state.timeline = state.timeline.map(toot => {
|
||||||
if (toot.id === message.id) {
|
if (toot.id === message.id) {
|
||||||
return message
|
return message
|
||||||
} else if (toot.reblog !== null && toot.reblog.id === message.id) {
|
} else if (toot.reblog !== null && toot.reblog.id === message.id) {
|
||||||
|
@ -76,12 +76,12 @@ const mutations: MutationTree<LocalState> = {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
[MUTATION_TYPES.DELETE_TOOT]: (state, message: Status) => {
|
[MUTATION_TYPES.DELETE_TOOT]: (state, id: string) => {
|
||||||
state.timeline = state.timeline.filter((toot) => {
|
state.timeline = state.timeline.filter(toot => {
|
||||||
if (toot.reblog !== null && toot.reblog.id === message.id) {
|
if (toot.reblog !== null && toot.reblog.id === id) {
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
return toot.id !== message.id
|
return toot.id !== id
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
@ -95,10 +95,7 @@ const mutations: MutationTree<LocalState> = {
|
||||||
|
|
||||||
const actions: ActionTree<LocalState, RootState> = {
|
const actions: ActionTree<LocalState, RootState> = {
|
||||||
fetchLocalTimeline: async ({ commit, rootState }) => {
|
fetchLocalTimeline: async ({ commit, rootState }) => {
|
||||||
const client = new Mastodon(
|
const client = new Mastodon(rootState.TimelineSpace.account.accessToken!, rootState.TimelineSpace.account.baseURL + '/api/v1')
|
||||||
rootState.TimelineSpace.account.accessToken!,
|
|
||||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
|
||||||
)
|
|
||||||
const res: Response<Array<Status>> = await client.get<Array<Status>>('/timelines/public', { limit: 40, local: true })
|
const res: Response<Array<Status>> = await client.get<Array<Status>>('/timelines/public', { limit: 40, local: true })
|
||||||
commit(MUTATION_TYPES.UPDATE_TIMELINE, res.data)
|
commit(MUTATION_TYPES.UPDATE_TIMELINE, res.data)
|
||||||
return res.data
|
return res.data
|
||||||
|
@ -108,11 +105,9 @@ const actions: ActionTree<LocalState, RootState> = {
|
||||||
return Promise.resolve(null)
|
return Promise.resolve(null)
|
||||||
}
|
}
|
||||||
commit(MUTATION_TYPES.CHANGE_LAZY_LOADING, true)
|
commit(MUTATION_TYPES.CHANGE_LAZY_LOADING, true)
|
||||||
const client = new Mastodon(
|
const client = new Mastodon(rootState.TimelineSpace.account.accessToken!, rootState.TimelineSpace.account.baseURL + '/api/v1')
|
||||||
rootState.TimelineSpace.account.accessToken!,
|
return client
|
||||||
rootState.TimelineSpace.account.baseURL + '/api/v1'
|
.get<Array<Status>>('/timelines/public', { max_id: lastStatus.id, limit: 40, local: true })
|
||||||
)
|
|
||||||
return client.get<Array<Status>>('/timelines/public', { max_id: lastStatus.id, limit: 40, local: true })
|
|
||||||
.then(res => {
|
.then(res => {
|
||||||
commit(MUTATION_TYPES.INSERT_TIMELINE, res.data)
|
commit(MUTATION_TYPES.INSERT_TIMELINE, res.data)
|
||||||
return res.data
|
return res.data
|
||||||
|
|
Loading…
Reference in New Issue