From affbe8700ec85cf39afd4c4cdf978a9a579e57c7 Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 4 Apr 2019 11:27:02 -0400 Subject: #468 - integrate endpoints --- src/services/api/api.service.js | 20 ++++++++++++++++++++ .../backend_interactor_service.js | 10 ++++++++++ 2 files changed, 30 insertions(+) (limited to 'src') diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index b7a602b8..65cebe78 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -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,22 @@ const unfollowUser = ({id, credentials}) => { }).then((data) => data.json()) } +const pinOwnStatus = ({ id, credentials }) => { + let url = MASTODON_PIN_OWN_STATUS(id) + return fetch(url, { + headers: authHeaders(credentials), + method: 'POST' + }).then((data) => data.json()) +} + +const unpinOwnStatus = ({ id, credentials }) => { + let url = MASTODON_UNPIN_OWN_STATUS(id) + return fetch(url, { + headers: authHeaders(credentials), + method: 'POST' + }).then((data) => data.json()) +} + const blockUser = ({id, credentials}) => { return fetch(MASTODON_BLOCK_USER_URL(id), { headers: authHeaders(credentials), @@ -715,6 +733,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..816e73c1 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -43,6 +43,14 @@ const backendInteractorService = (credentials) => { return apiService.unfollowUser({credentials, id}) } + const pinOwnStatus = (id) => { + return apiService.pinOwnStatus({credentials, id}) + } + + const unpinOwnStatus = (id) => { + return apiService.unpinOwnStatus({ credentials, id }) + } + const blockUser = (id) => { return apiService.blockUser({credentials, id}) } @@ -130,6 +138,8 @@ const backendInteractorService = (credentials) => { fetchFollowers, followUser, unfollowUser, + pinOwnStatus, + unpinOwnStatus, blockUser, unblockUser, fetchUser, -- cgit v1.2.3-70-g09d2 From 1aa0e8d7e026267aa2af82fbd18cf7521ad842e9 Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 4 Apr 2019 12:47:25 -0400 Subject: #468 - pin/unpin status --- src/components/status/status.js | 10 ++++++++++ src/components/status/status.vue | 22 ++++++++++++++++------ src/modules/statuses.js | 7 +++++++ .../entity_normalizer/entity_normalizer.service.js | 1 + 4 files changed, 34 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/components/status/status.js b/src/components/status/status.js index c01cfe79..c52e026a 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -353,6 +353,16 @@ const Status = { this.expandingSubject = true } }, + pinStatus () { + this.$store.state.api.backendInteractor.pinOwnStatus(this.status.id).then((status) => { + this.$store.dispatch('updatePinned', status) + }) + }, + unpinStatus () { + this.$store.state.api.backendInteractor.unpinOwnStatus(this.status.id).then((status) => { + this.$store.dispatch('updatePinned', status) + }) + }, replyEnter (id, event) { this.showPreview = true const targetId = id diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 21077972..0a2562c0 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -52,12 +52,18 @@ - - +
+ +
+
+ +
+
+ +
+
+ +
@@ -678,6 +684,10 @@ a.unmute { } } +.button-action-icon { + cursor: pointer; +} + @media all and (max-width: 800px) { .status-el { .retweet-info { diff --git a/src/modules/statuses.js b/src/modules/statuses.js index 4c92d4e1..176e5f42 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -424,6 +424,10 @@ export const mutations = { newStatus.favoritedBy.push(user) } }, + setPinned (state, { status }) { + const newStatus = state.allStatusesObject[status.id] + newStatus.pinned = status.pinned + }, setRetweeted (state, { status, value }) { const newStatus = state.allStatusesObject[status.id] @@ -533,6 +537,9 @@ const statuses = { rootState.api.backendInteractor.unfavorite(status.id) .then(status => commit('setFavoritedConfirm', { status, user: rootState.users.currentUser })) }, + updatePinned ({ rootState, commit }, status) { + commit('setPinned', { status }) + }, retweet ({ rootState, commit }, status) { // Optimistic retweeting... commit('setRetweeted', { status, value: true }) diff --git a/src/services/entity_normalizer/entity_normalizer.service.js b/src/services/entity_normalizer/entity_normalizer.service.js index 7a8708d5..97e20b99 100644 --- a/src/services/entity_normalizer/entity_normalizer.service.js +++ b/src/services/entity_normalizer/entity_normalizer.service.js @@ -211,6 +211,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 -- cgit v1.2.3-70-g09d2 From e28b19645aa6a546f8d1980fa479f20d3c48ff36 Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 4 Apr 2019 12:56:13 -0400 Subject: #468 - show pin for own statuses only --- src/components/status/status.js | 3 +++ src/components/status/status.vue | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/components/status/status.js b/src/components/status/status.js index c52e026a..a3596b69 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -269,6 +269,9 @@ const Status = { this.statusFromGlobalRepository.rebloggedBy ) return uniqBy(combinedUsers, 'id') + }, + ownStatus () { + return this.status.user.id === this.$store.state.users.currentUser.id } }, components: { diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 0a2562c0..0443e758 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -52,10 +52,10 @@ -
+
-
+
-- cgit v1.2.3-70-g09d2 From 2c89d49a3d22ed2813a6a57fb6049341fa8624ba Mon Sep 17 00:00:00 2001 From: dave Date: Thu, 4 Apr 2019 15:10:34 -0400 Subject: #468 - show pinned timeline and add pinned label to the status --- src/components/conversation/conversation.js | 3 ++- src/components/conversation/conversation.vue | 1 + src/components/status/status.js | 3 ++- src/components/status/status.vue | 17 ++++++++++--- src/components/timeline/timeline.js | 3 ++- src/components/timeline/timeline.vue | 3 ++- src/components/user_profile/user_profile.js | 5 ++++ src/components/user_profile/user_profile.vue | 29 ++++++++++++++-------- src/modules/statuses.js | 3 ++- src/services/api/api.service.js | 14 +++++++++++ .../timeline_fetcher/timeline_fetcher.service.js | 6 +++++ 11 files changed, 69 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js index ffeb7244..fc239ee9 100644 --- a/src/components/conversation/conversation.js +++ b/src/components/conversation/conversation.js @@ -41,7 +41,8 @@ const conversation = { props: [ 'statusoid', 'collapsable', - 'isPage' + 'isPage', + 'pinned' ], created () { if (this.isPage) { diff --git a/src/components/conversation/conversation.vue b/src/components/conversation/conversation.vue index d04ff722..40011113 100644 --- a/src/components/conversation/conversation.vue +++ b/src/components/conversation/conversation.vue @@ -13,6 +13,7 @@ :key="status.id" :inlineExpanded="collapsable && isExpanded" :statusoid="status" + :pinned="pinned" :expandable='!isExpanded' :focused="focused(status.id)" :inConversation="isExpanded" diff --git a/src/components/status/status.js b/src/components/status/status.js index a3596b69..f2881742 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -26,7 +26,8 @@ const Status = { 'replies', 'isPreview', 'noHeading', - 'inlineExpanded' + 'inlineExpanded', + 'pinned' ], data () { return { diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 0443e758..a5614f59 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -12,6 +12,13 @@