diff options
Diffstat (limited to 'src/services')
| -rw-r--r-- | src/services/api/api.service.js | 35 | ||||
| -rw-r--r-- | src/services/backend_interactor_service/backend_interactor_service.js | 6 | ||||
| -rw-r--r-- | src/services/entity_normalizer/entity_normalizer.service.js | 6 |
3 files changed, 39 insertions, 8 deletions
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index b7a602b8..162b62f7 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -14,9 +14,9 @@ const FOLLOW_REQUESTS_URL = '/api/pleroma/friend_requests' const APPROVE_USER_URL = '/api/pleroma/friendships/approve' const DENY_USER_URL = '/api/pleroma/friendships/deny' const TAG_USER_URL = '/api/pleroma/admin/users/tag' -const PERMISSION_GROUP_URL = '/api/pleroma/admin/permission_group' -const ACTIVATION_STATUS_URL = '/api/pleroma/admin/activation_status' -const ADMIN_USER_URL = '/api/pleroma/admin/user' +const PERMISSION_GROUP_URL = (screenName, right) => `/api/pleroma/admin/users/${screenName}/permission_group/${right}` +const ACTIVATION_STATUS_URL = screenName => `/api/pleroma/admin/users/${screenName}/activation_status` +const ADMIN_USERS_URL = '/api/pleroma/admin/users' const SUGGESTIONS_URL = '/api/v1/suggestions' const MASTODON_USER_FAVORITES_TIMELINE_URL = '/api/v1/favourites' @@ -51,6 +51,8 @@ const MASTODON_STATUS_FAVORITEDBY_URL = id => `/api/v1/statuses/${id}/favourited const MASTODON_STATUS_REBLOGGEDBY_URL = id => `/api/v1/statuses/${id}/reblogged_by` const MASTODON_PROFILE_UPDATE_URL = '/api/v1/accounts/update_credentials' const MASTODON_REPORT_USER_URL = '/api/v1/reports' +const MASTODON_PIN_OWN_STATUS = id => `/api/v1/statuses/${id}/pin` +const MASTODON_UNPIN_OWN_STATUS = id => `/api/v1/statuses/${id}/unpin` import { each, map, concat, last } from 'lodash' import { parseStatus, parseUser, parseNotification, parseAttachment } from '../entity_normalizer/entity_normalizer.service.js' @@ -210,6 +212,16 @@ const unfollowUser = ({id, credentials}) => { }).then((data) => data.json()) } +const pinOwnStatus = ({ id, credentials }) => { + return promisedRequest({ url: MASTODON_PIN_OWN_STATUS(id), credentials, method: 'POST' }) + .then((data) => parseStatus(data)) +} + +const unpinOwnStatus = ({ id, credentials }) => { + return promisedRequest({ url: MASTODON_UNPIN_OWN_STATUS(id), credentials, method: 'POST' }) + .then((data) => parseStatus(data)) +} + const blockUser = ({id, credentials}) => { return fetch(MASTODON_BLOCK_USER_URL(id), { headers: authHeaders(credentials), @@ -387,7 +399,7 @@ const untagUser = ({tag, credentials, ...options}) => { const addRight = ({right, credentials, ...user}) => { const screenName = user.screen_name - return fetch(`${PERMISSION_GROUP_URL}/${screenName}/${right}`, { + return fetch(PERMISSION_GROUP_URL(screenName, right), { method: 'POST', headers: authHeaders(credentials), body: {} @@ -397,7 +409,7 @@ const addRight = ({right, credentials, ...user}) => { const deleteRight = ({right, credentials, ...user}) => { const screenName = user.screen_name - return fetch(`${PERMISSION_GROUP_URL}/${screenName}/${right}`, { + return fetch(PERMISSION_GROUP_URL(screenName, right), { method: 'DELETE', headers: authHeaders(credentials), body: {} @@ -413,7 +425,7 @@ const setActivationStatus = ({status, credentials, ...user}) => { const headers = authHeaders(credentials) headers['Content-Type'] = 'application/json' - return fetch(`${ACTIVATION_STATUS_URL}/${screenName}.json`, { + return fetch(ACTIVATION_STATUS_URL(screenName), { method: 'PUT', headers: headers, body: JSON.stringify(body) @@ -424,7 +436,7 @@ const deleteUser = ({credentials, ...user}) => { const screenName = user.screen_name const headers = authHeaders(credentials) - return fetch(`${ADMIN_USER_URL}.json?nickname=${screenName}`, { + return fetch(`${ADMIN_USERS_URL}?nickname=${screenName}`, { method: 'DELETE', headers: headers }) @@ -488,6 +500,12 @@ const fetchTimeline = ({timeline, credentials, since = false, until = false, use .then((data) => data.map(isNotifications ? parseNotification : parseStatus)) } +const fetchPinnedStatuses = ({ id, credentials }) => { + const url = MASTODON_USER_TIMELINE_URL(id) + '?pinned=true' + return promisedRequest({ url, credentials }) + .then((data) => data.map(parseStatus)) +} + const verifyCredentials = (user) => { return fetch(LOGIN_URL, { method: 'POST', @@ -708,6 +726,7 @@ const reportUser = ({credentials, userId, statusIds, comment, forward}) => { const apiService = { verifyCredentials, fetchTimeline, + fetchPinnedStatuses, fetchConversation, fetchStatus, fetchFriends, @@ -715,6 +734,8 @@ const apiService = { fetchFollowers, followUser, unfollowUser, + pinOwnStatus, + unpinOwnStatus, blockUser, unblockUser, fetchUser, diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index c2b93de4..e23e1222 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -98,6 +98,9 @@ const backendInteractorService = (credentials) => { const fetchFollowRequests = () => apiService.fetchFollowRequests({credentials}) const fetchOAuthTokens = () => apiService.fetchOAuthTokens({credentials}) const revokeOAuthToken = (id) => apiService.revokeOAuthToken({id, credentials}) + const fetchPinnedStatuses = (id) => apiService.fetchPinnedStatuses({credentials, id}) + const pinOwnStatus = (id) => apiService.pinOwnStatus({credentials, id}) + const unpinOwnStatus = (id) => apiService.unpinOwnStatus({credentials, id}) const getCaptcha = () => apiService.getCaptcha() const register = (params) => apiService.register(params) @@ -144,6 +147,9 @@ const backendInteractorService = (credentials) => { fetchBlocks, fetchOAuthTokens, revokeOAuthToken, + fetchPinnedStatuses, + pinOwnStatus, + unpinOwnStatus, tagUser, untagUser, addRight, diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index 7a8708d5..8e413584 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -131,6 +131,8 @@ export const parseUser = (data) => { output.statuses_count = data.statuses_count output.friendIds = [] output.followerIds = [] + output.pinnedStatuseIds = [] + if (data.pleroma) { output.follow_request_count = data.pleroma.follow_request_count } @@ -141,6 +143,7 @@ export const parseUser = (data) => { } output.tags = output.tags || [] + output.rights = output.rights || {} return output } @@ -168,7 +171,7 @@ export const addEmojis = (string, emojis) => { return emojis.reduce((acc, emoji) => { return acc.replace( new RegExp(`:${emoji.shortcode}:`, 'g'), - `<img src='${emoji.url}' alt='${emoji.shortcode}' class='emoji' />` + `<img src='${emoji.url}' alt='${emoji.shortcode}' title='${emoji.shortcode}' class='emoji' />` ) }, string) } @@ -211,6 +214,7 @@ export const parseStatus = (data) => { output.summary_html = addEmojis(data.spoiler_text, data.emojis) output.external_url = data.url + output.pinned = data.pinned } else { output.favorited = data.favorited output.fave_num = data.fave_num |
