|
|
|
@ -9,6 +9,8 @@ import resizeImage from 'flavours/glitch/util/resize_image'; |
|
|
|
|
|
|
|
|
|
import { updateTimeline } from './timelines'; |
|
|
|
|
import { showAlertForError } from './alerts'; |
|
|
|
|
import { showAlert } from './alerts'; |
|
|
|
|
import { defineMessages } from 'react-intl'; |
|
|
|
|
|
|
|
|
|
let cancelFetchComposeSuggestionsAccounts; |
|
|
|
|
|
|
|
|
@ -53,6 +55,10 @@ export const COMPOSE_UPLOAD_CHANGE_FAIL = 'COMPOSE_UPLOAD_UPDATE_FAIL'; |
|
|
|
|
|
|
|
|
|
export const COMPOSE_DOODLE_SET = 'COMPOSE_DOODLE_SET'; |
|
|
|
|
|
|
|
|
|
const messages = defineMessages({ |
|
|
|
|
uploadErrorLimit: { id: 'upload_error.limit', defaultMessage: 'File upload limit exceeded.' }, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
export function changeCompose(text) { |
|
|
|
|
return { |
|
|
|
|
type: COMPOSE_CHANGE, |
|
|
|
@ -208,20 +214,32 @@ export function doodleSet(options) { |
|
|
|
|
|
|
|
|
|
export function uploadCompose(files) { |
|
|
|
|
return function (dispatch, getState) { |
|
|
|
|
if (getState().getIn(['compose', 'media_attachments']).size > 3) { |
|
|
|
|
const uploadLimit = 4; |
|
|
|
|
const media = getState().getIn(['compose', 'media_attachments']); |
|
|
|
|
const total = Array.from(files).reduce((a, v) => a + v.size, 0); |
|
|
|
|
const progress = new Array(files.length).fill(0); |
|
|
|
|
|
|
|
|
|
if (files.length + media.size > uploadLimit) { |
|
|
|
|
dispatch(showAlert(undefined, messages.uploadErrorLimit)); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
dispatch(uploadComposeRequest()); |
|
|
|
|
|
|
|
|
|
resizeImage(files[0]).then(file => { |
|
|
|
|
const data = new FormData(); |
|
|
|
|
data.append('file', file); |
|
|
|
|
|
|
|
|
|
return api(getState).post('/api/v1/media', data, { |
|
|
|
|
onUploadProgress: ({ loaded, total }) => dispatch(uploadComposeProgress(loaded, total)), |
|
|
|
|
}).then(({ data }) => dispatch(uploadComposeSuccess(data))); |
|
|
|
|
}).catch(error => dispatch(uploadComposeFail(error))); |
|
|
|
|
for (const [i, f] of Array.from(files).entries()) { |
|
|
|
|
if (media.size + i > 3) break; |
|
|
|
|
|
|
|
|
|
resizeImage(f).then(file => { |
|
|
|
|
const data = new FormData(); |
|
|
|
|
data.append('file', file); |
|
|
|
|
|
|
|
|
|
return api(getState).post('/api/v1/media', data, { |
|
|
|
|
onUploadProgress: function({ loaded }){ |
|
|
|
|
progress[i] = loaded; |
|
|
|
|
dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total)); |
|
|
|
|
}, |
|
|
|
|
}).then(({ data }) => dispatch(uploadComposeSuccess(data))); |
|
|
|
|
}).catch(error => dispatch(uploadComposeFail(error))); |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|