]>
cat aescling's git repositories - mastodon.git/blob - app/javascript/mastodon/actions/statuses.js
1 import api
from '../api';
2 import openDB
from '../storage/db';
3 import { evictStatus
} from '../storage/modifier';
5 import { deleteFromTimelines
} from './timelines';
6 import { fetchStatusCard
} from './cards';
7 import { importFetchedStatus
, importFetchedStatuses
, importAccount
, importStatus
} from './importer';
9 export const STATUS_FETCH_REQUEST
= 'STATUS_FETCH_REQUEST';
10 export const STATUS_FETCH_SUCCESS
= 'STATUS_FETCH_SUCCESS';
11 export const STATUS_FETCH_FAIL
= 'STATUS_FETCH_FAIL';
13 export const STATUS_DELETE_REQUEST
= 'STATUS_DELETE_REQUEST';
14 export const STATUS_DELETE_SUCCESS
= 'STATUS_DELETE_SUCCESS';
15 export const STATUS_DELETE_FAIL
= 'STATUS_DELETE_FAIL';
17 export const CONTEXT_FETCH_REQUEST
= 'CONTEXT_FETCH_REQUEST';
18 export const CONTEXT_FETCH_SUCCESS
= 'CONTEXT_FETCH_SUCCESS';
19 export const CONTEXT_FETCH_FAIL
= 'CONTEXT_FETCH_FAIL';
21 export const STATUS_MUTE_REQUEST
= 'STATUS_MUTE_REQUEST';
22 export const STATUS_MUTE_SUCCESS
= 'STATUS_MUTE_SUCCESS';
23 export const STATUS_MUTE_FAIL
= 'STATUS_MUTE_FAIL';
25 export const STATUS_UNMUTE_REQUEST
= 'STATUS_UNMUTE_REQUEST';
26 export const STATUS_UNMUTE_SUCCESS
= 'STATUS_UNMUTE_SUCCESS';
27 export const STATUS_UNMUTE_FAIL
= 'STATUS_UNMUTE_FAIL';
29 export const STATUS_REVEAL
= 'STATUS_REVEAL';
30 export const STATUS_HIDE
= 'STATUS_HIDE';
32 export const REDRAFT
= 'REDRAFT';
34 export function fetchStatusRequest(id
, skipLoading
) {
36 type: STATUS_FETCH_REQUEST
,
42 function getFromDB(dispatch
, getState
, accountIndex
, index
, id
) {
43 return new Promise((resolve
, reject
) => {
44 const request
= index
.get(id
);
46 request
.onerror
= reject
;
48 request
.onsuccess
= () => {
51 if (!request
.result
) {
56 dispatch(importStatus(request
.result
));
58 if (getState().getIn(['accounts', request
.result
.account
], null) === null) {
59 promises
.push(new Promise((accountResolve
, accountReject
) => {
60 const accountRequest
= accountIndex
.get(request
.result
.account
);
62 accountRequest
.onerror
= accountReject
;
63 accountRequest
.onsuccess
= () => {
64 if (!request
.result
) {
69 dispatch(importAccount(accountRequest
.result
));
75 if (request
.result
.reblog
&& getState().getIn(['statuses', request
.result
.reblog
], null) === null) {
76 promises
.push(getFromDB(dispatch
, getState
, accountIndex
, index
, request
.result
.reblog
));
79 resolve(Promise
.all(promises
));
84 export function fetchStatus(id
) {
85 return (dispatch
, getState
) => {
86 const skipLoading
= getState().getIn(['statuses', id
], null) !== null;
88 dispatch(fetchContext(id
));
89 dispatch(fetchStatusCard(id
));
95 dispatch(fetchStatusRequest(id
, skipLoading
));
98 const transaction
= db
.transaction(['accounts', 'statuses'], 'read');
99 const accountIndex
= transaction
.objectStore('accounts').index('id');
100 const index
= transaction
.objectStore('statuses').index('id');
102 return getFromDB(dispatch
, getState
, accountIndex
, index
, id
).then(() => {
109 dispatch(fetchStatusSuccess(skipLoading
));
110 }, () => api(getState
).get(`/api/v1/statuses/${id}`).then(response
=> {
111 dispatch(importFetchedStatus(response
.data
));
112 dispatch(fetchStatusSuccess(skipLoading
));
114 dispatch(fetchStatusFail(id
, error
, skipLoading
));
119 export function fetchStatusSuccess(skipLoading
) {
121 type: STATUS_FETCH_SUCCESS
,
126 export function fetchStatusFail(id
, error
, skipLoading
) {
128 type: STATUS_FETCH_FAIL
,
136 export function redraft(status
) {
143 export function deleteStatus(id
, withRedraft
= false) {
144 return (dispatch
, getState
) => {
145 const status
= getState().getIn(['statuses', id
]);
147 dispatch(deleteStatusRequest(id
));
149 api(getState
).delete(`/api/v1/statuses/${id}`).then(() => {
151 dispatch(deleteStatusSuccess(id
));
152 dispatch(deleteFromTimelines(id
));
155 dispatch(redraft(status
));
158 dispatch(deleteStatusFail(id
, error
));
163 export function deleteStatusRequest(id
) {
165 type: STATUS_DELETE_REQUEST
,
170 export function deleteStatusSuccess(id
) {
172 type: STATUS_DELETE_SUCCESS
,
177 export function deleteStatusFail(id
, error
) {
179 type: STATUS_DELETE_FAIL
,
185 export function fetchContext(id
) {
186 return (dispatch
, getState
) => {
187 dispatch(fetchContextRequest(id
));
189 api(getState
).get(`/api/v1/statuses/${id}/context`).then(response
=> {
190 dispatch(importFetchedStatuses(response
.data
.ancestors
.concat(response
.data
.descendants
)));
191 dispatch(fetchContextSuccess(id
, response
.data
.ancestors
, response
.data
.descendants
));
194 if (error
.response
&& error
.response
.status
=== 404) {
195 dispatch(deleteFromTimelines(id
));
198 dispatch(fetchContextFail(id
, error
));
203 export function fetchContextRequest(id
) {
205 type: CONTEXT_FETCH_REQUEST
,
210 export function fetchContextSuccess(id
, ancestors
, descendants
) {
212 type: CONTEXT_FETCH_SUCCESS
,
216 statuses: ancestors
.concat(descendants
),
220 export function fetchContextFail(id
, error
) {
222 type: CONTEXT_FETCH_FAIL
,
229 export function muteStatus(id
) {
230 return (dispatch
, getState
) => {
231 dispatch(muteStatusRequest(id
));
233 api(getState
).post(`/api/v1/statuses/${id}/mute`).then(() => {
234 dispatch(muteStatusSuccess(id
));
236 dispatch(muteStatusFail(id
, error
));
241 export function muteStatusRequest(id
) {
243 type: STATUS_MUTE_REQUEST
,
248 export function muteStatusSuccess(id
) {
250 type: STATUS_MUTE_SUCCESS
,
255 export function muteStatusFail(id
, error
) {
257 type: STATUS_MUTE_FAIL
,
263 export function unmuteStatus(id
) {
264 return (dispatch
, getState
) => {
265 dispatch(unmuteStatusRequest(id
));
267 api(getState
).post(`/api/v1/statuses/${id}/unmute`).then(() => {
268 dispatch(unmuteStatusSuccess(id
));
270 dispatch(unmuteStatusFail(id
, error
));
275 export function unmuteStatusRequest(id
) {
277 type: STATUS_UNMUTE_REQUEST
,
282 export function unmuteStatusSuccess(id
) {
284 type: STATUS_UNMUTE_SUCCESS
,
289 export function unmuteStatusFail(id
, error
) {
291 type: STATUS_UNMUTE_FAIL
,
297 export function hideStatus(ids
) {
298 if (!Array
.isArray(ids
)) {
308 export function revealStatus(ids
) {
309 if (!Array
.isArray(ids
)) {
This page took 0.143704 seconds and 4 git commands to generate.