aboutsummaryrefslogtreecommitdiff
path: root/src/services
diff options
context:
space:
mode:
Diffstat (limited to 'src/services')
-rw-r--r--src/services/api/api.service.js25
-rw-r--r--src/services/status_poster/status_poster.service.js15
l---------src/services/timeline_fetcher/.#timeline_fetcher.service.js1
-rw-r--r--src/services/timeline_fetcher/timeline_fetcher.service.js6
4 files changed, 39 insertions, 8 deletions
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index df7b4190..06585ac7 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -6,21 +6,27 @@ const PUBLIC_AND_EXTERNAL_TIMELINE_URL = '/api/statuses/public_and_external_time
const FAVORITE_URL = '/api/favorites/create'
const UNFAVORITE_URL = '/api/favorites/destroy'
const STATUS_UPDATE_URL = '/api/statuses/update.json'
+const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload'
// const CONVERSATION_URL = '/api/statusnet/conversation/';
-// const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload';
// const FORM_CONTENT_TYPE = {'Content-Type': 'application/x-www-form-urlencoded'};
// import { param, ajax } from 'jquery';
// import { merge } from 'lodash';
-const authHeaders = (user) => ({ 'Authorization': `Basic ${btoa(`${user.username}:${user.password}`)}` })
+const authHeaders = (user) => {
+ if (user) {
+ return { 'Authorization': `Basic ${btoa(`${user.username}:${user.password}`)}` }
+ } else {
+ return { }
+ }
+}
const fetchTimeline = ({timeline, credentials, since = false, until = false}) => {
const timelineUrls = {
public: PUBLIC_TIMELINE_URL,
friends: FRIENDS_TIMELINE_URL,
- 'public-and-external': PUBLIC_AND_EXTERNAL_TIMELINE_URL
+ 'publicAndExternal': PUBLIC_AND_EXTERNAL_TIMELINE_URL
}
let url = timelineUrls[timeline]
@@ -75,12 +81,23 @@ const postStatus = ({credentials, status, mediaIds, inReplyToStatusId}) => {
})
}
+const uploadMedia = ({formData, credentials}) => {
+ return fetch(MEDIA_UPLOAD_URL, {
+ body: formData,
+ method: 'POST',
+ headers: authHeaders(credentials)
+ })
+ .then((response) => response.text())
+ .then((text) => (new DOMParser()).parseFromString(text, 'application/xml'))
+}
+
const apiService = {
verifyCredentials,
fetchTimeline,
favorite,
unfavorite,
- postStatus
+ postStatus,
+ uploadMedia
}
export default apiService
diff --git a/src/services/status_poster/status_poster.service.js b/src/services/status_poster/status_poster.service.js
index 1a96b5f6..2a324541 100644
--- a/src/services/status_poster/status_poster.service.js
+++ b/src/services/status_poster/status_poster.service.js
@@ -12,8 +12,21 @@ const postStatus = ({ store, status, media = [], inReplyToStatusId = undefined }
})
}
+const uploadMedia = ({ store, formData }) => {
+ const credentials = store.state.users.currentUser.credentials
+
+ return apiService.uploadMedia({ credentials, 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
+ postStatus,
+ uploadMedia
}
export default statusPosterService
diff --git a/src/services/timeline_fetcher/.#timeline_fetcher.service.js b/src/services/timeline_fetcher/.#timeline_fetcher.service.js
deleted file mode 120000
index 8315cdae..00000000
--- a/src/services/timeline_fetcher/.#timeline_fetcher.service.js
+++ /dev/null
@@ -1 +0,0 @@
-roger@yuuyuu.18961 \ No newline at end of file
diff --git a/src/services/timeline_fetcher/timeline_fetcher.service.js b/src/services/timeline_fetcher/timeline_fetcher.service.js
index a3d9b9d1..8a39eeb5 100644
--- a/src/services/timeline_fetcher/timeline_fetcher.service.js
+++ b/src/services/timeline_fetcher/timeline_fetcher.service.js
@@ -16,7 +16,8 @@ const update = ({store, statuses, timeline, showImmediately}) => {
const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false, showImmediately = false}) => {
const args = { timeline, credentials }
- const timelineData = store.rootState.statuses.timelines[camelCase(timeline)]
+ const rootState = store.rootState || store.state
+ const timelineData = rootState.statuses.timelines[camelCase(timeline)]
if (older) {
args['until'] = timelineData.minVisibleId
@@ -24,7 +25,7 @@ const fetchAndUpdate = ({store, credentials, timeline = 'friends', older = false
args['since'] = timelineData.maxId
}
- apiService.fetchTimeline(args)
+ return apiService.fetchTimeline(args)
.then((statuses) => update({store, statuses, timeline, showImmediately}))
}
@@ -35,6 +36,7 @@ const startFetching = ({ timeline = 'friends', credentials, store }) => {
setInterval(boundFetchAndUpdate, 10000)
}
const timelineFetcher = {
+ fetchAndUpdate,
startFetching
}