[Glitch] Fix WebUI allowing to upload more items than the limit
Port 83a88426ca to glitch-soc
Signed-off-by: Thibaut Girka <thib@sitedethib.com>
			
			
This commit is contained in:
		
							parent
							
								
									0fc784f8d0
								
							
						
					
					
						commit
						c98e2faa41
					
				
					 3 changed files with 11 additions and 6 deletions
				
			
		|  | @ -232,10 +232,11 @@ export function uploadCompose(files) { | ||||||
|   return function (dispatch, getState) { |   return function (dispatch, getState) { | ||||||
|     const uploadLimit = 4; |     const uploadLimit = 4; | ||||||
|     const media  = getState().getIn(['compose', 'media_attachments']); |     const media  = getState().getIn(['compose', 'media_attachments']); | ||||||
|  |     const pending  = getState().getIn(['compose', 'pending_media_attachments']); | ||||||
|     const progress = new Array(files.length).fill(0); |     const progress = new Array(files.length).fill(0); | ||||||
|     let total = Array.from(files).reduce((a, v) => a + v.size, 0); |     let total = Array.from(files).reduce((a, v) => a + v.size, 0); | ||||||
| 
 | 
 | ||||||
|     if (files.length + media.size > uploadLimit) { |     if (files.length + media.size + pending > uploadLimit) { | ||||||
|       dispatch(showAlert(undefined, messages.uploadErrorLimit)); |       dispatch(showAlert(undefined, messages.uploadErrorLimit)); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|  | @ -262,7 +263,7 @@ export function uploadCompose(files) { | ||||||
|             dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total)); |             dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total)); | ||||||
|           }, |           }, | ||||||
|         }).then(({ data }) => dispatch(uploadComposeSuccess(data, f))); |         }).then(({ data }) => dispatch(uploadComposeSuccess(data, f))); | ||||||
|       }).catch(error => dispatch(uploadComposeFail(error))); |       }).catch(error => dispatch(uploadComposeFail(error, true))); | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| }; | }; | ||||||
|  | @ -293,10 +294,11 @@ export function changeUploadComposeSuccess(media) { | ||||||
|   }; |   }; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| export function changeUploadComposeFail(error) { | export function changeUploadComposeFail(error, decrement = false) { | ||||||
|   return { |   return { | ||||||
|     type: COMPOSE_UPLOAD_CHANGE_FAIL, |     type: COMPOSE_UPLOAD_CHANGE_FAIL, | ||||||
|     error: error, |     error: error, | ||||||
|  |     decrement: decrement, | ||||||
|     skipLoading: true, |     skipLoading: true, | ||||||
|   }; |   }; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | @ -12,11 +12,12 @@ function mapStateToProps (state) { | ||||||
|   const spoilersAlwaysOn = state.getIn(['local_settings', 'always_show_spoilers_field']); |   const spoilersAlwaysOn = state.getIn(['local_settings', 'always_show_spoilers_field']); | ||||||
|   const poll = state.getIn(['compose', 'poll']); |   const poll = state.getIn(['compose', 'poll']); | ||||||
|   const media = state.getIn(['compose', 'media_attachments']); |   const media = state.getIn(['compose', 'media_attachments']); | ||||||
|  |   const pending_media = state.getIn(['compose', 'pending_media_attachments']); | ||||||
|   return { |   return { | ||||||
|     acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']).toArray().join(','), |     acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']).toArray().join(','), | ||||||
|     resetFileKey: state.getIn(['compose', 'resetFileKey']), |     resetFileKey: state.getIn(['compose', 'resetFileKey']), | ||||||
|     hasPoll: !!poll, |     hasPoll: !!poll, | ||||||
|     allowMedia: !poll && (media ? media.size < 4 && !media.some(item => ['video', 'audio'].includes(item.get('type'))) : true), |     allowMedia: !poll && (media ? media.size + pending_media < 4 && !media.some(item => ['video', 'audio'].includes(item.get('type'))) : pending_media < 4), | ||||||
|     hasMedia: media && !!media.size, |     hasMedia: media && !!media.size, | ||||||
|     allowPoll: !(media && !!media.size), |     allowPoll: !(media && !!media.size), | ||||||
|     showContentTypeChoice: state.getIn(['local_settings', 'show_content_type_choice']), |     showContentTypeChoice: state.getIn(['local_settings', 'show_content_type_choice']), | ||||||
|  |  | ||||||
|  | @ -78,6 +78,7 @@ const initialState = ImmutableMap({ | ||||||
|   is_changing_upload: false, |   is_changing_upload: false, | ||||||
|   progress: 0, |   progress: 0, | ||||||
|   media_attachments: ImmutableList(), |   media_attachments: ImmutableList(), | ||||||
|  |   pending_media_attachments: 0, | ||||||
|   poll: null, |   poll: null, | ||||||
|   suggestion_token: null, |   suggestion_token: null, | ||||||
|   suggestions: ImmutableList(), |   suggestions: ImmutableList(), | ||||||
|  | @ -201,6 +202,7 @@ function appendMedia(state, media, file) { | ||||||
|     map.set('is_uploading', false); |     map.set('is_uploading', false); | ||||||
|     map.set('resetFileKey', Math.floor((Math.random() * 0x10000))); |     map.set('resetFileKey', Math.floor((Math.random() * 0x10000))); | ||||||
|     map.set('idempotencyKey', uuid()); |     map.set('idempotencyKey', uuid()); | ||||||
|  |     map.update('pending_media_attachments', n => n - 1); | ||||||
| 
 | 
 | ||||||
|     if (prevSize === 0 && (state.get('default_sensitive') || state.get('spoiler'))) { |     if (prevSize === 0 && (state.get('default_sensitive') || state.get('spoiler'))) { | ||||||
|       map.set('sensitive', true); |       map.set('sensitive', true); | ||||||
|  | @ -423,11 +425,11 @@ export default function compose(state = initialState, action) { | ||||||
|   case COMPOSE_UPLOAD_CHANGE_FAIL: |   case COMPOSE_UPLOAD_CHANGE_FAIL: | ||||||
|     return state.set('is_changing_upload', false); |     return state.set('is_changing_upload', false); | ||||||
|   case COMPOSE_UPLOAD_REQUEST: |   case COMPOSE_UPLOAD_REQUEST: | ||||||
|     return state.set('is_uploading', true); |     return state.set('is_uploading', true).update('pending_media_attachments', n => n + 1); | ||||||
|   case COMPOSE_UPLOAD_SUCCESS: |   case COMPOSE_UPLOAD_SUCCESS: | ||||||
|     return appendMedia(state, fromJS(action.media), action.file); |     return appendMedia(state, fromJS(action.media), action.file); | ||||||
|   case COMPOSE_UPLOAD_FAIL: |   case COMPOSE_UPLOAD_FAIL: | ||||||
|     return state.set('is_uploading', false); |     return state.set('is_uploading', false).update('pending_media_attachments', n => action.decrement ? n - 1 : n); | ||||||
|   case COMPOSE_UPLOAD_UNDO: |   case COMPOSE_UPLOAD_UNDO: | ||||||
|     return removeMedia(state, action.media_id); |     return removeMedia(state, action.media_id); | ||||||
|   case COMPOSE_UPLOAD_PROGRESS: |   case COMPOSE_UPLOAD_PROGRESS: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue