Merge 1cc8d1bf95
into cfc4d5f915
This commit is contained in:
commit
354df3837f
|
@ -396,6 +396,7 @@ export class MastodonService {
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadMediaAttachment(account: AccountInfo, file: File, description: string): Promise<Attachment> {
|
uploadMediaAttachment(account: AccountInfo, file: File, description: string): Promise<Attachment> {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
let input = new FormData();
|
let input = new FormData();
|
||||||
input.append('file', file);
|
input.append('file', file);
|
||||||
if (description !== null && description !== undefined) {
|
if (description !== null && description !== undefined) {
|
||||||
|
@ -405,7 +406,33 @@ export class MastodonService {
|
||||||
}
|
}
|
||||||
const route = `https://${account.instance}${this.apiRoutes.uploadMediaAttachment}`;
|
const route = `https://${account.instance}${this.apiRoutes.uploadMediaAttachment}`;
|
||||||
const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` });
|
const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` });
|
||||||
return this.httpClient.post<Attachment>(route, input, { headers: headers }).toPromise();
|
|
||||||
|
this.httpClient.post<Attachment>(route, input, { headers: headers, observe: 'response' })
|
||||||
|
.subscribe(response => {
|
||||||
|
if (response.status === 202) {
|
||||||
|
let tryCount = 1;
|
||||||
|
const checkMediaStatus = () => {
|
||||||
|
this.httpClient.get<Attachment>(`https://${account.instance}${this.apiRoutes.updateMediaAttachment.replace('{0}', response.body.id)}`, { headers: headers })
|
||||||
|
.subscribe(mediaStatus => {
|
||||||
|
if (mediaStatus.url) {
|
||||||
|
resolve(mediaStatus);
|
||||||
|
} else {
|
||||||
|
const retryAfter = (Math.log2(tryCount) || 1) * 1000;
|
||||||
|
tryCount += 1;
|
||||||
|
setTimeout(checkMediaStatus, retryAfter);
|
||||||
|
}
|
||||||
|
}, error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
checkMediaStatus();
|
||||||
|
} else {
|
||||||
|
resolve(response.body);
|
||||||
|
}
|
||||||
|
}, error => {
|
||||||
|
reject(error);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: add focus support
|
//TODO: add focus support
|
||||||
|
|
|
@ -27,7 +27,7 @@ export class ApiRoutes {
|
||||||
followRemote = '/api/v1/follows';
|
followRemote = '/api/v1/follows';
|
||||||
getInstance = '/api/v1/instance';
|
getInstance = '/api/v1/instance';
|
||||||
getInstancev2 = '/api/v2/instance';
|
getInstancev2 = '/api/v2/instance';
|
||||||
uploadMediaAttachment = '/api/v1/media';
|
uploadMediaAttachment = '/api/v2/media';
|
||||||
updateMediaAttachment = '/api/v1/media/{0}';
|
updateMediaAttachment = '/api/v1/media/{0}';
|
||||||
getMutes = '/api/v1/mutes';
|
getMutes = '/api/v1/mutes';
|
||||||
getNotifications = '/api/v1/notifications';
|
getNotifications = '/api/v1/notifications';
|
||||||
|
|
Loading…
Reference in New Issue