[Glitch] Change local media attachments to perform heavy processing asynchronously
Port front-end part of 9660aa4543 to glitch-soc
[API] This makes use of a new media posting API (/api/v2/media), supporting
background processing of uploaded files. For Pleroma's purposes, this could
be handled the same as /api/v1/media since afaik Pleroma doesn't do any
transcoding.
Signed-off-by: Thibaut Girka <thib@sitedethib.com>
			
			
This commit is contained in:
		
				
					committed by
					
						
						Thibaut Girka
					
				
			
			
				
	
			
			
			
						parent
						
							9abb227250
						
					
				
				
					commit
					295dadc9f0
				
			@@ -259,12 +259,31 @@ export function uploadCompose(files) {
 | 
			
		||||
        // Account for disparity in size of original image and resized data
 | 
			
		||||
        total += file.size - f.size;
 | 
			
		||||
 | 
			
		||||
        return api(getState).post('/api/v1/media', data, {
 | 
			
		||||
        return api(getState).post('/api/v2/media', data, {
 | 
			
		||||
          onUploadProgress: function({ loaded }){
 | 
			
		||||
            progress[i] = loaded;
 | 
			
		||||
            dispatch(uploadComposeProgress(progress.reduce((a, v) => a + v, 0), total));
 | 
			
		||||
          },
 | 
			
		||||
        }).then(({ data }) => dispatch(uploadComposeSuccess(data, f)));
 | 
			
		||||
        }).then(({ status, data }) => {
 | 
			
		||||
          // If server-side processing of the media attachment has not completed yet,
 | 
			
		||||
          // poll the server until it is, before showing the media attachment as uploaded
 | 
			
		||||
 | 
			
		||||
          if (status === 200) {
 | 
			
		||||
            dispatch(uploadComposeSuccess(data, f));
 | 
			
		||||
          } else if (status === 202) {
 | 
			
		||||
            const poll = () => {
 | 
			
		||||
              api(getState).get(`/api/v1/media/${data.id}`).then(response => {
 | 
			
		||||
                if (response.status === 200) {
 | 
			
		||||
                  dispatch(uploadComposeSuccess(data, f));
 | 
			
		||||
                } else if (response.status === 206) {
 | 
			
		||||
                  setTimeout(() => poll(), 1000);
 | 
			
		||||
                }
 | 
			
		||||
              }).catch(error => dispatch(uploadComposeFail(error)));
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            poll();
 | 
			
		||||
          }
 | 
			
		||||
        });
 | 
			
		||||
      }).catch(error => dispatch(uploadComposeFail(error)));
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user