diff options
Diffstat (limited to 'app/javascript/mastodon/actions/accounts.js')
-rw-r--r-- | app/javascript/mastodon/actions/accounts.js | 110 |
1 files changed, 107 insertions, 3 deletions
diff --git a/app/javascript/mastodon/actions/accounts.js b/app/javascript/mastodon/actions/accounts.js index eac5c78bb..2b7bce681 100644 --- a/app/javascript/mastodon/actions/accounts.js +++ b/app/javascript/mastodon/actions/accounts.js @@ -37,6 +37,14 @@ export const ACCOUNT_TIMELINE_EXPAND_REQUEST = 'ACCOUNT_TIMELINE_EXPAND_REQUEST' export const ACCOUNT_TIMELINE_EXPAND_SUCCESS = 'ACCOUNT_TIMELINE_EXPAND_SUCCESS'; export const ACCOUNT_TIMELINE_EXPAND_FAIL = 'ACCOUNT_TIMELINE_EXPAND_FAIL'; +export const ACCOUNT_MEDIA_TIMELINE_FETCH_REQUEST = 'ACCOUNT_MEDIA_TIMELINE_FETCH_REQUEST'; +export const ACCOUNT_MEDIA_TIMELINE_FETCH_SUCCESS = 'ACCOUNT_MEDIA_TIMELINE_FETCH_SUCCESS'; +export const ACCOUNT_MEDIA_TIMELINE_FETCH_FAIL = 'ACCOUNT_MEDIA_TIMELINE_FETCH_FAIL'; + +export const ACCOUNT_MEDIA_TIMELINE_EXPAND_REQUEST = 'ACCOUNT_MEDIA_TIMELINE_EXPAND_REQUEST'; +export const ACCOUNT_MEDIA_TIMELINE_EXPAND_SUCCESS = 'ACCOUNT_MEDIA_TIMELINE_EXPAND_SUCCESS'; +export const ACCOUNT_MEDIA_TIMELINE_EXPAND_FAIL = 'ACCOUNT_MEDIA_TIMELINE_EXPAND_FAIL'; + export const FOLLOWERS_FETCH_REQUEST = 'FOLLOWERS_FETCH_REQUEST'; export const FOLLOWERS_FETCH_SUCCESS = 'FOLLOWERS_FETCH_SUCCESS'; export const FOLLOWERS_FETCH_FAIL = 'FOLLOWERS_FETCH_FAIL'; @@ -96,17 +104,17 @@ export function fetchAccountTimeline(id, replace = false) { const ids = getState().getIn(['timelines', 'accounts_timelines', id, 'items'], Immutable.List()); const newestId = ids.size > 0 ? ids.first() : null; - let params = ''; + let params = {}; let skipLoading = false; if (newestId !== null && !replace) { - params = `?since_id=${newestId}`; + params.since_id = newestId; skipLoading = true; } dispatch(fetchAccountTimelineRequest(id, skipLoading)); - api(getState).get(`/api/v1/accounts/${id}/statuses${params}`).then(response => { + api(getState).get(`/api/v1/accounts/${id}/statuses`, { params }).then(response => { dispatch(fetchAccountTimelineSuccess(id, response.data, replace, skipLoading)); }).catch(error => { dispatch(fetchAccountTimelineFail(id, error, skipLoading)); @@ -114,6 +122,29 @@ export function fetchAccountTimeline(id, replace = false) { }; }; +export function fetchAccountMediaTimeline(id, replace = false) { + return (dispatch, getState) => { + const ids = getState().getIn(['timelines', 'accounts_media_timelines', id, 'items'], Immutable.List()); + const newestId = ids.size > 0 ? ids.first() : null; + + let params = { only_media: 'true', limit: 12 }; + let skipLoading = false; + + if (newestId !== null && !replace) { + params.since_id = newestId; + skipLoading = true; + } + + dispatch(fetchAccountMediaTimelineRequest(id, skipLoading)); + + api(getState).get(`/api/v1/accounts/${id}/statuses`, { params }).then(response => { + dispatch(fetchAccountMediaTimelineSuccess(id, response.data, replace, skipLoading)); + }).catch(error => { + dispatch(fetchAccountMediaTimelineFail(id, error, skipLoading)); + }); + }; +}; + export function expandAccountTimeline(id) { return (dispatch, getState) => { const lastId = getState().getIn(['timelines', 'accounts_timelines', id, 'items'], Immutable.List()).last(); @@ -134,6 +165,27 @@ export function expandAccountTimeline(id) { }; }; +export function expandAccountMediaTimeline(id) { + return (dispatch, getState) => { + const lastId = getState().getIn(['timelines', 'accounts_media_timelines', id, 'items'], Immutable.List()).last(); + + dispatch(expandAccountMediaTimelineRequest(id)); + + api(getState).get(`/api/v1/accounts/${id}/statuses`, { + params: { + limit: 12, + only_media: 'true', + max_id: lastId + } + }).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(expandAccountMediaTimelineSuccess(id, response.data, next)); + }).catch(error => { + dispatch(expandAccountMediaTimelineFail(id, error)); + }); + }; +}; + export function fetchAccountRequest(id) { return { type: ACCOUNT_FETCH_REQUEST, @@ -251,6 +303,34 @@ export function fetchAccountTimelineFail(id, error, skipLoading) { }; }; +export function fetchAccountMediaTimelineRequest(id, skipLoading) { + return { + type: ACCOUNT_MEDIA_TIMELINE_FETCH_REQUEST, + id, + skipLoading + }; +}; + +export function fetchAccountMediaTimelineSuccess(id, statuses, replace, skipLoading) { + return { + type: ACCOUNT_MEDIA_TIMELINE_FETCH_SUCCESS, + id, + statuses, + replace, + skipLoading + }; +}; + +export function fetchAccountMediaTimelineFail(id, error, skipLoading) { + return { + type: ACCOUNT_MEDIA_TIMELINE_FETCH_FAIL, + id, + error, + skipLoading, + skipAlert: error.response.status === 404 + }; +}; + export function expandAccountTimelineRequest(id) { return { type: ACCOUNT_TIMELINE_EXPAND_REQUEST, @@ -275,6 +355,30 @@ export function expandAccountTimelineFail(id, error) { }; }; +export function expandAccountMediaTimelineRequest(id) { + return { + type: ACCOUNT_MEDIA_TIMELINE_EXPAND_REQUEST, + id + }; +}; + +export function expandAccountMediaTimelineSuccess(id, statuses, next) { + return { + type: ACCOUNT_MEDIA_TIMELINE_EXPAND_SUCCESS, + id, + statuses, + next + }; +}; + +export function expandAccountMediaTimelineFail(id, error) { + return { + type: ACCOUNT_MEDIA_TIMELINE_EXPAND_FAIL, + id, + error + }; +}; + export function blockAccount(id) { return (dispatch, getState) => { dispatch(blockAccountRequest(id)); |