aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/services/api/api.service.js8
-rw-r--r--src/services/status_normalizer/status_normalizer.service.js70
2 files changed, 71 insertions, 7 deletions
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 48e5d480..de72bdbb 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -44,7 +44,7 @@ const SUGGESTIONS_URL = '/api/v1/suggestions'
const MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites'
import { each, map } from 'lodash'
-import { parseStatus } from '../status_normalizer/status_normalizer.service.js'
+import { parseStatus, parseUser } from '../status_normalizer/status_normalizer.service.js'
import 'whatwg-fetch'
const oldfetch = window.fetch
@@ -243,24 +243,28 @@ const fetchUser = ({id, credentials}) => {
let url = `${USER_URL}?user_id=${id}`
return fetch(url, { headers: authHeaders(credentials) })
.then((data) => data.json())
+ .then((data) => parseUser(data))
}
const fetchFriends = ({id, credentials}) => {
let url = `${FRIENDS_URL}?user_id=${id}`
return fetch(url, { headers: authHeaders(credentials) })
.then((data) => data.json())
+ .then((data) => data.map(parseUser))
}
const fetchFollowers = ({id, credentials}) => {
let url = `${FOLLOWERS_URL}?user_id=${id}`
return fetch(url, { headers: authHeaders(credentials) })
.then((data) => data.json())
+ .then((data) => data.map(parseUser))
}
const fetchAllFollowing = ({username, credentials}) => {
const url = `${ALL_FOLLOWING_URL}/${username}.json`
return fetch(url, { headers: authHeaders(credentials) })
.then((data) => data.json())
+ .then((data) => data.map(parseUser))
}
const fetchFollowRequests = ({credentials}) => {
@@ -280,7 +284,7 @@ const fetchStatus = ({id, credentials}) => {
let url = `${STATUS_URL}/${id}.json`
return fetch(url, { headers: authHeaders(credentials) })
.then((data) => data.json())
- .then((data) => parseStatus(data))
+ .then((data) => data.map(parseStatus))
}
const setUserMute = ({id, credentials, muted = true}) => {
diff --git a/src/services/status_normalizer/status_normalizer.service.js b/src/services/status_normalizer/status_normalizer.service.js
index ce7cd050..6a575bf5 100644
--- a/src/services/status_normalizer/status_normalizer.service.js
+++ b/src/services/status_normalizer/status_normalizer.service.js
@@ -1,4 +1,4 @@
-export const qvitterStatusType = (status) => {
+const qvitterStatusType = (status) => {
if (status.is_post_verb) {
return 'status'
}
@@ -27,11 +27,71 @@ const isMastoAPI = (status) => {
return status.hasOwnProperty('account')
}
-const parseUser = (data) => {
- return {
- id: data.id,
- screen_name: data.screen_name || data.acct
+export const parseUser = (data) => {
+ const output = {}
+ const masto = data.hasOwnProperty('acct')
+ // case for users in "mentions" property for statuses in MastoAPI
+ const mastoShort = masto && !data.hasOwnProperty('avatar')
+
+ output.id = data.id
+
+ if (masto) {
+ output.screen_name = data.acct
+
+ // There's nothing else to get
+ if (mastoShort) {
+ return output
+ }
+
+ output.name = null // missing
+ output.name_html = data.display_name
+
+ output.description = null // missing
+ output.description_html = data.note
+
+ // Utilize avatar_static for gif avatars?
+ output.profile_image_url = data.avatar
+ output.profile_image_url_original = data.avatar
+
+ // Same, utilize header_static?
+ output.cover_photo = data.header
+
+ output.friends_count = data.following_count
+
+ output.bot = data.bot
+
+ output.statusnet_profile_url = data.url
+
+ // Missing, trying to recover
+ output.is_local = !output.screen_name.includes('@')
+ } else {
+ output.screen_name = data.screen_name
+
+ output.name = data.name
+ output.name_html = data.name_html
+
+ output.description = data.description
+ output.description_html = data.description_html
+
+ output.profile_image_url = data.profile_image_url
+ output.profile_image_url_original = data.profile_image_url_original
+
+ output.cover_photo = data.cover_photo
+
+ output.friends_count = data.friends_count
+
+ output.bot = null // missing
+
+ output.statusnet_profile_url = data.statusnet_profile_url
+ output.is_local = data.is_local
}
+
+ output.created_at = new Date(data.created_at)
+ output.locked = data.locked
+ output.followers_count = data.followers_count
+ output.statuses_count = data.statuses_count
+
+ return output
}
const parseAttachment = (data) => {