119 lines
2.9 KiB
JavaScript
119 lines
2.9 KiB
JavaScript
|
export const qvitterStatusType = (status) => {
|
||
|
if (status.is_post_verb) {
|
||
|
return 'status'
|
||
|
}
|
||
|
|
||
|
if (status.retweeted_status) {
|
||
|
return 'retweet'
|
||
|
}
|
||
|
|
||
|
if ((typeof status.uri === 'string' && status.uri.match(/(fave|objectType=Favourite)/)) ||
|
||
|
(typeof status.text === 'string' && status.text.match(/favorited/))) {
|
||
|
return 'favorite'
|
||
|
}
|
||
|
|
||
|
if (status.text.match(/deleted notice {{tag/) || status.qvitter_delete_notice) {
|
||
|
return 'deletion'
|
||
|
}
|
||
|
|
||
|
if (status.text.match(/started following/) || status.activity_type === 'follow') {
|
||
|
return 'follow'
|
||
|
}
|
||
|
|
||
|
return 'unknown'
|
||
|
}
|
||
|
|
||
|
const isMastoAPI = (status) => {
|
||
|
return status.hasOwnProperty('account')
|
||
|
}
|
||
|
|
||
|
const parseUser = (data) => {
|
||
|
return {
|
||
|
id: data.id,
|
||
|
screen_name: data.screen_name || data.acct
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const parseAttachment = (data) => {
|
||
|
return {
|
||
|
...data,
|
||
|
mimetype: data.mimetype || data.type
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export const parseStatus = (data) => {
|
||
|
const output = {}
|
||
|
const masto = isMastoAPI(data)
|
||
|
output.raw = data
|
||
|
|
||
|
console.log(masto ? 'MAMMAL' : 'OLD SHIT')
|
||
|
console.log(data)
|
||
|
if (masto) {
|
||
|
output.favorited = data.favourited
|
||
|
output.fave_num = data.favourites_count
|
||
|
|
||
|
output.repeated = data.reblogged
|
||
|
output.repeat_num = data.reblogs_count
|
||
|
|
||
|
output.type = data.reblog ? 'retweet' : 'status'
|
||
|
output.nsfw = data.sensitive
|
||
|
|
||
|
output.statusnet_html = data.content
|
||
|
// Not exactly the same...
|
||
|
output.text = data.content
|
||
|
|
||
|
output.in_reply_to_status_id = data.in_reply_to_id
|
||
|
output.in_reply_to_user_id = data.in_reply_to_user_id
|
||
|
} else {
|
||
|
output.favorited = data.favorited
|
||
|
output.fave_num = data.fave_num
|
||
|
|
||
|
output.repeated = data.repeated
|
||
|
output.repeat_num = data.repeat_num
|
||
|
|
||
|
// catchall, temporary
|
||
|
// Object.assign(output, data)
|
||
|
|
||
|
output.type = qvitterStatusType(data)
|
||
|
|
||
|
if (data.nsfw === undefined) {
|
||
|
output.nsfw = isNsfw(data)
|
||
|
if (data.retweeted_status) {
|
||
|
output.nsfw = data.retweeted_status.nsfw
|
||
|
}
|
||
|
}
|
||
|
output.statusnet_html = data.statusnet_html
|
||
|
output.text = data.text
|
||
|
|
||
|
output.in_reply_to_status_id = data.in_reply_to_id
|
||
|
output.in_reply_to_user_id = data.in_reply_to_account_id
|
||
|
}
|
||
|
|
||
|
output.id = Number(data.id)
|
||
|
output.visibility = data.visibility
|
||
|
output.created_at = new Date(data.created_at)
|
||
|
|
||
|
output.user = parseUser(masto ? data.account : data.user)
|
||
|
|
||
|
output.attentions = ((masto ? data.mentions : data.attentions) || [])
|
||
|
.map(_ => ({
|
||
|
id: _.id,
|
||
|
following: _.following // FIXME: MastoAPI doesn't have this
|
||
|
}))
|
||
|
|
||
|
output.attachments = ((masto ? data.media_attachments : data.attachments) || [])
|
||
|
.map(parseAttachment)
|
||
|
|
||
|
const retweetedStatus = masto ? data.reblog : data.retweeted_status
|
||
|
if (retweetedStatus) {
|
||
|
output.retweeted_status = parseStatus(retweetedStatus)
|
||
|
}
|
||
|
|
||
|
return output
|
||
|
}
|
||
|
|
||
|
const isNsfw = (status) => {
|
||
|
const nsfwRegex = /#nsfw/i
|
||
|
return (status.tags || []).includes('nsfw') || !!status.text.match(nsfwRegex)
|
||
|
}
|