aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/components/conversation/conversation.js23
-rw-r--r--src/services/api/api.service.js35
2 files changed, 35 insertions, 23 deletions
diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js
index 48b8aaaa..fd4303ca 100644
--- a/src/components/conversation/conversation.js
+++ b/src/components/conversation/conversation.js
@@ -25,7 +25,8 @@ const sortAndFilterConversation = (conversation) => {
const conversation = {
data () {
return {
- highlight: null
+ highlight: null,
+ relevantIds: []
}
},
props: [
@@ -48,9 +49,11 @@ const conversation = {
return []
}
- const conversationId = this.status.statusnet_conversation_id
- const statuses = this.$store.state.statuses.allStatuses
- const conversation = filter(statuses, { statusnet_conversation_id: conversationId })
+ const statusesObject = this.$store.state.statuses.allStatusesObject
+ const conversation = this.relevantIds.reduce((acc, id) => {
+ acc.push(statusesObject[id])
+ return acc
+ }, [])
return sortAndFilterConversation(conversation)
},
replies () {
@@ -83,15 +86,13 @@ const conversation = {
methods: {
fetchConversation () {
if (this.status) {
- const conversationId = this.status.statusnet_conversation_id
+ const conversationId = this.status.id
this.$store.state.api.backendInteractor.fetchConversation({id: conversationId})
- .then((statuses) => this.$store.dispatch('addNewStatuses', { statuses }))
+ .then((statuses) => {
+ this.$store.dispatch('addNewStatuses', { statuses })
+ statuses.forEach(status => this.relevantIds.push(status.id))
+ })
.then(() => this.setHighlight(this.statusId))
- } else {
- const id = this.$route.params.id
- this.$store.state.api.backendInteractor.fetchStatus({id})
- .then((status) => this.$store.dispatch('addNewStatuses', { statuses: [status] }))
- .then(() => this.fetchConversation())
}
},
getReplies (id) {
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 176f1c18..1510d146 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -11,9 +11,7 @@ const RETWEET_URL = '/api/statuses/retweet'
const UNRETWEET_URL = '/api/statuses/unretweet'
const STATUS_UPDATE_URL = '/api/statuses/update.json'
const STATUS_DELETE_URL = '/api/statuses/destroy'
-const STATUS_URL = '/api/statuses/show'
const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload'
-const CONVERSATION_URL = '/api/statusnet/conversation'
const MENTIONS_URL = '/api/statuses/mentions.json'
const DM_TIMELINE_URL = '/api/statuses/dm_timeline.json'
const FOLLOWERS_URL = '/api/statuses/followers.json'
@@ -41,6 +39,8 @@ const DENY_USER_URL = '/api/pleroma/friendships/deny'
const SUGGESTIONS_URL = '/api/v1/suggestions'
const MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites'
+const MASTODON_STATUS_URL = id => `/api/v1/statuses/${id}`
+const MASTODON_STATUS_CONTEXT_URL = id => `/api/v1/statuses/${id}/context`
const MASTODON_USER_URL = '/api/v1/accounts'
const MASTODON_USER_RELATIONSHIPS_URL = '/api/v1/accounts/relationships'
const MASTODON_USER_TIMELINE_URL = id => `/api/v1/accounts/${id}/statuses`
@@ -313,20 +313,31 @@ const fetchFollowRequests = ({credentials}) => {
}
const fetchConversation = ({id, credentials}) => {
- let url = `${CONVERSATION_URL}/${id}.json?count=100`
- return fetch(url, { headers: authHeaders(credentials) })
- .then((data) => {
- if (data.ok) {
- return data
- }
- throw new Error('Error fetching timeline', data)
- })
- .then((data) => data.json())
+ let url = MASTODON_STATUS_URL(id)
+ let urlContext = MASTODON_STATUS_CONTEXT_URL(id)
+ return Promise.all([
+ fetch(url, { headers: authHeaders(credentials) })
+ .then((data) => {
+ if (data.ok) {
+ return data
+ }
+ throw new Error('Error fetching timeline', data)
+ })
+ .then((data) => data.json()),
+ fetch(urlContext, { headers: authHeaders(credentials) })
+ .then((data) => {
+ if (data.ok) {
+ return data
+ }
+ throw new Error('Error fetching timeline', data)
+ })
+ .then((data) => data.json())])
+ .then(([status, context]) => [...context.ancestors, status, ...context.descendants])
.then((data) => data.map(parseStatus))
}
const fetchStatus = ({id, credentials}) => {
- let url = `${STATUS_URL}/${id}.json`
+ let url = MASTODON_STATUS_URL(id)
return fetch(url, { headers: authHeaders(credentials) })
.then((data) => {
if (data.ok) {