mirror of
https://github.com/lunaisnotaboy/mastodon.git
synced 2024-12-11 16:05:04 +00:00
6d2301988f
Modified uploadCompose action to send media ids of attached media when sending a request. Modified create method in MediaController to check if when posting a video, there are no other media attached to the status by looking at the media ids sent from the uploadCompose action.
260 lines
6.4 KiB
JavaScript
260 lines
6.4 KiB
JavaScript
import api from '../api';
|
|
|
|
import { updateTimeline } from './timelines';
|
|
|
|
export const COMPOSE_CHANGE = 'COMPOSE_CHANGE';
|
|
export const COMPOSE_SUBMIT_REQUEST = 'COMPOSE_SUBMIT_REQUEST';
|
|
export const COMPOSE_SUBMIT_SUCCESS = 'COMPOSE_SUBMIT_SUCCESS';
|
|
export const COMPOSE_SUBMIT_FAIL = 'COMPOSE_SUBMIT_FAIL';
|
|
export const COMPOSE_REPLY = 'COMPOSE_REPLY';
|
|
export const COMPOSE_REPLY_CANCEL = 'COMPOSE_REPLY_CANCEL';
|
|
export const COMPOSE_MENTION = 'COMPOSE_MENTION';
|
|
export const COMPOSE_UPLOAD_REQUEST = 'COMPOSE_UPLOAD_REQUEST';
|
|
export const COMPOSE_UPLOAD_SUCCESS = 'COMPOSE_UPLOAD_SUCCESS';
|
|
export const COMPOSE_UPLOAD_FAIL = 'COMPOSE_UPLOAD_FAIL';
|
|
export const COMPOSE_UPLOAD_PROGRESS = 'COMPOSE_UPLOAD_PROGRESS';
|
|
export const COMPOSE_UPLOAD_UNDO = 'COMPOSE_UPLOAD_UNDO';
|
|
|
|
export const COMPOSE_SUGGESTIONS_CLEAR = 'COMPOSE_SUGGESTIONS_CLEAR';
|
|
export const COMPOSE_SUGGESTIONS_READY = 'COMPOSE_SUGGESTIONS_READY';
|
|
export const COMPOSE_SUGGESTION_SELECT = 'COMPOSE_SUGGESTION_SELECT';
|
|
|
|
export const COMPOSE_MOUNT = 'COMPOSE_MOUNT';
|
|
export const COMPOSE_UNMOUNT = 'COMPOSE_UNMOUNT';
|
|
|
|
export const COMPOSE_SENSITIVITY_CHANGE = 'COMPOSE_SENSITIVITY_CHANGE';
|
|
export const COMPOSE_SPOILERNESS_CHANGE = 'COMPOSE_SPOILERNESS_CHANGE';
|
|
export const COMPOSE_SPOILER_TEXT_CHANGE = 'COMPOSE_SPOILER_TEXT_CHANGE';
|
|
export const COMPOSE_VISIBILITY_CHANGE = 'COMPOSE_VISIBILITY_CHANGE';
|
|
export const COMPOSE_LISTABILITY_CHANGE = 'COMPOSE_LISTABILITY_CHANGE';
|
|
|
|
export function changeCompose(text) {
|
|
return {
|
|
type: COMPOSE_CHANGE,
|
|
text: text
|
|
};
|
|
};
|
|
|
|
export function replyCompose(status, router) {
|
|
return (dispatch, getState) => {
|
|
dispatch({
|
|
type: COMPOSE_REPLY,
|
|
status: status
|
|
});
|
|
|
|
if (!getState().getIn(['compose', 'mounted'])) {
|
|
router.push('/statuses/new');
|
|
}
|
|
};
|
|
};
|
|
|
|
export function cancelReplyCompose() {
|
|
return {
|
|
type: COMPOSE_REPLY_CANCEL
|
|
};
|
|
};
|
|
|
|
export function mentionCompose(account, router) {
|
|
return (dispatch, getState) => {
|
|
dispatch({
|
|
type: COMPOSE_MENTION,
|
|
account: account
|
|
});
|
|
|
|
if (!getState().getIn(['compose', 'mounted'])) {
|
|
router.push('/statuses/new');
|
|
}
|
|
};
|
|
};
|
|
|
|
export function submitCompose() {
|
|
return function (dispatch, getState) {
|
|
dispatch(submitComposeRequest());
|
|
|
|
api(getState).post('/api/v1/statuses', {
|
|
status: getState().getIn(['compose', 'text'], ''),
|
|
in_reply_to_id: getState().getIn(['compose', 'in_reply_to'], null),
|
|
media_ids: getState().getIn(['compose', 'media_attachments']).map(item => item.get('id')),
|
|
sensitive: getState().getIn(['compose', 'sensitive']),
|
|
spoiler_text: getState().getIn(['compose', 'spoiler_text'], ''),
|
|
visibility: getState().getIn(['compose', 'private']) ? 'private' : (getState().getIn(['compose', 'unlisted']) ? 'unlisted' : 'public')
|
|
}).then(function (response) {
|
|
dispatch(submitComposeSuccess({ ...response.data }));
|
|
|
|
// To make the app more responsive, immediately get the status into the columns
|
|
dispatch(updateTimeline('home', { ...response.data }));
|
|
|
|
if (response.data.in_reply_to_id === null && response.data.visibility === 'public') {
|
|
dispatch(updateTimeline('public', { ...response.data }));
|
|
}
|
|
}).catch(function (error) {
|
|
dispatch(submitComposeFail(error));
|
|
});
|
|
};
|
|
};
|
|
|
|
export function submitComposeRequest() {
|
|
return {
|
|
type: COMPOSE_SUBMIT_REQUEST
|
|
};
|
|
};
|
|
|
|
export function submitComposeSuccess(status) {
|
|
return {
|
|
type: COMPOSE_SUBMIT_SUCCESS,
|
|
status: status
|
|
};
|
|
};
|
|
|
|
export function submitComposeFail(error) {
|
|
return {
|
|
type: COMPOSE_SUBMIT_FAIL,
|
|
error: error
|
|
};
|
|
};
|
|
|
|
export function uploadCompose(files) {
|
|
return function (dispatch, getState) {
|
|
dispatch(uploadComposeRequest());
|
|
|
|
let data = new FormData();
|
|
data.append('file', files[0]);
|
|
data.append('media_ids', getState().getIn(
|
|
['compose', 'media_attachments']
|
|
).map(item => item.get('id')));
|
|
|
|
api(getState).post('/api/v1/media', data, {
|
|
onUploadProgress: function (e) {
|
|
dispatch(uploadComposeProgress(e.loaded, e.total));
|
|
}
|
|
}).then(function (response) {
|
|
dispatch(uploadComposeSuccess(response.data));
|
|
}).catch(function (error) {
|
|
dispatch(uploadComposeFail(error));
|
|
});
|
|
};
|
|
};
|
|
|
|
export function uploadComposeRequest() {
|
|
return {
|
|
type: COMPOSE_UPLOAD_REQUEST
|
|
};
|
|
};
|
|
|
|
export function uploadComposeProgress(loaded, total) {
|
|
return {
|
|
type: COMPOSE_UPLOAD_PROGRESS,
|
|
loaded: loaded,
|
|
total: total
|
|
};
|
|
};
|
|
|
|
export function uploadComposeSuccess(media) {
|
|
return {
|
|
type: COMPOSE_UPLOAD_SUCCESS,
|
|
media: media
|
|
};
|
|
};
|
|
|
|
export function uploadComposeFail(error) {
|
|
return {
|
|
type: COMPOSE_UPLOAD_FAIL,
|
|
error: error
|
|
};
|
|
};
|
|
|
|
export function undoUploadCompose(media_id) {
|
|
return {
|
|
type: COMPOSE_UPLOAD_UNDO,
|
|
media_id: media_id
|
|
};
|
|
};
|
|
|
|
export function clearComposeSuggestions() {
|
|
return {
|
|
type: COMPOSE_SUGGESTIONS_CLEAR
|
|
};
|
|
};
|
|
|
|
export function fetchComposeSuggestions(token) {
|
|
return (dispatch, getState) => {
|
|
api(getState).get('/api/v1/accounts/search', {
|
|
params: {
|
|
q: token,
|
|
resolve: false,
|
|
limit: 4
|
|
}
|
|
}).then(response => {
|
|
dispatch(readyComposeSuggestions(token, response.data));
|
|
});
|
|
};
|
|
};
|
|
|
|
export function readyComposeSuggestions(token, accounts) {
|
|
return {
|
|
type: COMPOSE_SUGGESTIONS_READY,
|
|
token,
|
|
accounts
|
|
};
|
|
};
|
|
|
|
export function selectComposeSuggestion(position, token, accountId) {
|
|
return (dispatch, getState) => {
|
|
const completion = getState().getIn(['accounts', accountId, 'acct']);
|
|
|
|
dispatch({
|
|
type: COMPOSE_SUGGESTION_SELECT,
|
|
position,
|
|
token,
|
|
completion
|
|
});
|
|
};
|
|
};
|
|
|
|
export function mountCompose() {
|
|
return {
|
|
type: COMPOSE_MOUNT
|
|
};
|
|
};
|
|
|
|
export function unmountCompose() {
|
|
return {
|
|
type: COMPOSE_UNMOUNT
|
|
};
|
|
};
|
|
|
|
export function changeComposeSensitivity(checked) {
|
|
return {
|
|
type: COMPOSE_SENSITIVITY_CHANGE,
|
|
checked
|
|
};
|
|
};
|
|
|
|
export function changeComposeSpoilerness(checked) {
|
|
return {
|
|
type: COMPOSE_SPOILERNESS_CHANGE,
|
|
checked
|
|
};
|
|
};
|
|
|
|
export function changeComposeSpoilerText(text) {
|
|
return {
|
|
type: COMPOSE_SPOILER_TEXT_CHANGE,
|
|
text
|
|
};
|
|
};
|
|
|
|
export function changeComposeVisibility(checked) {
|
|
return {
|
|
type: COMPOSE_VISIBILITY_CHANGE,
|
|
checked
|
|
};
|
|
};
|
|
|
|
export function changeComposeListability(checked) {
|
|
return {
|
|
type: COMPOSE_LISTABILITY_CHANGE,
|
|
checked
|
|
};
|
|
};
|