[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:
Eugen Rochko 2020-03-08 23:56:18 +01:00 committed by Thibaut Girka
parent 9abb227250
commit 295dadc9f0
1 changed files with 21 additions and 2 deletions

View File

@ -259,12 +259,31 @@ export function uploadCompose(files) {
// Account for disparity in size of original image and resized data // Account for disparity in size of original image and resized data
total += file.size - f.size; total += file.size - f.size;
return api(getState).post('/api/v1/media', data, { return api(getState).post('/api/v2/media', data, {
onUploadProgress: function({ loaded }){ onUploadProgress: function({ loaded }){
progress[i] = loaded; progress[i] = loaded;
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(({ 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))); }).catch(error => dispatch(uploadComposeFail(error)));
}; };
}; };