From 79805584613bd3d3ec5fba6481fc1ba02986a1a8 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Sun, 30 Oct 2016 16:53:58 +0100 Subject: [PATCH] Basic status posting. --- .../post_status_form/post_status_form.js | 20 +++++++ .../post_status_form/post_status_form.vue | 20 +++++++ src/components/user_panel/user_panel.js | 4 +- src/components/user_panel/user_panel.vue | 2 +- src/services/api/api.service.js | 41 ++++++++------- .../status_poster/status_poster.service.js | 52 +++++++++++++++++++ 6 files changed, 117 insertions(+), 22 deletions(-) create mode 100644 src/components/post_status_form/post_status_form.js create mode 100644 src/components/post_status_form/post_status_form.vue create mode 100644 src/services/status_poster/status_poster.service.js diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js new file mode 100644 index 00000000..596c9f58 --- /dev/null +++ b/src/components/post_status_form/post_status_form.js @@ -0,0 +1,20 @@ +import statusPoster from '../../services/status_poster/status_poster.service.js' + +const PostStatusForm = { + data() { + return { + newStatus: { } + } + }, + methods: { + postStatus(newStatus) { + statusPoster.postStatus({ + status: newStatus.status, + store: this.$store + }) + this.newStatus = { } + } + } +} + +export default PostStatusForm diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue new file mode 100644 index 00000000..d2106d5a --- /dev/null +++ b/src/components/post_status_form/post_status_form.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/components/user_panel/user_panel.js b/src/components/user_panel/user_panel.js index fed42fca..418c3a6f 100644 --- a/src/components/user_panel/user_panel.js +++ b/src/components/user_panel/user_panel.js @@ -1,4 +1,5 @@ import LoginForm from '../login_form/login_form.vue' +import PostStatusForm from '../post_status_form/post_status_form.vue' const UserPanel = { computed: { @@ -11,7 +12,8 @@ const UserPanel = { } }, components: { - LoginForm + LoginForm, + PostStatusForm } } diff --git a/src/components/user_panel/user_panel.vue b/src/components/user_panel/user_panel.vue index 29831fbc..6b986f84 100644 --- a/src/components/user_panel/user_panel.vue +++ b/src/components/user_panel/user_panel.vue @@ -29,7 +29,7 @@ diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 5a46451b..df7b4190 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -5,8 +5,8 @@ const PUBLIC_TIMELINE_URL = '/api/statuses/public_timeline.json' const PUBLIC_AND_EXTERNAL_TIMELINE_URL = '/api/statuses/public_and_external_timeline.json' const FAVORITE_URL = '/api/favorites/create' const UNFAVORITE_URL = '/api/favorites/destroy' +const STATUS_UPDATE_URL = '/api/statuses/update.json' // const CONVERSATION_URL = '/api/statusnet/conversation/'; -// const STATUS_UPDATE_URL = '/api/statuses/update.json'; // const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload'; // const FORM_CONTENT_TYPE = {'Content-Type': 'application/x-www-form-urlencoded'}; @@ -57,11 +57,30 @@ const unfavorite = ({ id, credentials }) => { }) } +const postStatus = ({credentials, status, mediaIds, inReplyToStatusId}) => { + const idsText = mediaIds.join(',') + const form = new FormData() + + form.append('status', status) + form.append('source', 'Pleroma FE') + form.append('media_ids', idsText) + if (inReplyToStatusId) { + form.append('in_reply_to_status_id', inReplyToStatusId) + } + + return fetch(STATUS_UPDATE_URL, { + body: form, + method: 'POST', + headers: authHeaders(credentials) + }) +} + const apiService = { verifyCredentials, fetchTimeline, favorite, - unfavorite + unfavorite, + postStatus } export default apiService @@ -102,24 +121,6 @@ export default apiService // return $http.post(LOGIN_URL, null, { headers: authHeaders }); // }; -// const postStatus = ({status, mediaIds, in_reply_to_status_id}) => { -// const idsText = mediaIds.join(','); -// const form = new FormData(); - -// form.append('status', status); -// form.append('source', 'The Wired FE'); -// form.append('media_ids', idsText); -// if(in_reply_to_status_id) { -// form.append('in_reply_to_status_id', in_reply_to_status_id); -// }; - -// return fetch(STATUS_UPDATE_URL, { -// body: form, -// method: 'POST', -// headers: authHeaders -// }); -// }; - // const unfavorite = (id) => $http.post(`${UNFAVORITE_URL}/${id}.json`, null, {headers: authHeaders}); // // This was impossible to get to work with $http. You're supposed to set Content-Type diff --git a/src/services/status_poster/status_poster.service.js b/src/services/status_poster/status_poster.service.js new file mode 100644 index 00000000..1a96b5f6 --- /dev/null +++ b/src/services/status_poster/status_poster.service.js @@ -0,0 +1,52 @@ +import { map } from 'lodash' +import apiService from '../api/api.service.js' + +const postStatus = ({ store, status, media = [], inReplyToStatusId = undefined }) => { + const mediaIds = map(media, 'id') + + return apiService.postStatus({credentials: store.state.users.currentUser.credentials, status, mediaIds, inReplyToStatusId}) + .then((data) => data.json()) + .then((data) => { + store.commit('addNewStatuses', + { statuses: [data], timeline: 'friends', showImmediately: true }) + }) +} + +const statusPosterService = { + postStatus +} + +export default statusPosterService + +// const statusPosterServiceFactory = (apiService, $ngRedux) => { +// const postStatus = ({status, media = [], in_reply_to_status_id = undefined}) => { +// const mediaIds = map(media, 'id'); + +// return apiService.postStatus({status, mediaIds, in_reply_to_status_id}). +// then((data) => data.json()). +// then((data) => { +// $ngRedux.dispatch({type: 'ADD_NEW_STATUSES', data: { statuses: [data], timeline: 'friends', showImmediately: true }}); +// }); +// }; + +// const uploadMedia = (formData) => { +// return apiService.uploadMedia(formData).then((xml) => { +// return { +// id: xml.getElementsByTagName('media_id')[0].textContent, +// url: xml.getElementsByTagName('media_url')[0].textContent, +// image: xml.getElementsByTagName('atom:link')[0].getAttribute('href') +// }; +// }); +// }; + +// const statusPosterService = { +// postStatus, +// uploadMedia +// }; + +// return statusPosterService; +// }; + +// statusPosterServiceFactory.$inject = ['apiService', '$ngRedux']; + +// export default statusPosterServiceFactory;