This commit is contained in:
Lastorder 2024-03-06 14:23:29 +01:00 committed by GitHub
commit 354df3837f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 12 deletions

View File

@ -396,16 +396,43 @@ export class MastodonService {
} }
uploadMediaAttachment(account: AccountInfo, file: File, description: string): Promise<Attachment> { uploadMediaAttachment(account: AccountInfo, file: File, description: string): Promise<Attachment> {
let input = new FormData(); return new Promise((resolve, reject) => {
input.append('file', file); let input = new FormData();
if (description !== null && description !== undefined) { input.append('file', file);
input.append('description', description); if (description !== null && description !== undefined) {
} else { input.append('description', description);
input.append('description', ''); } else {
} input.append('description', '');
const route = `https://${account.instance}${this.apiRoutes.uploadMediaAttachment}`; }
const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` }); const route = `https://${account.instance}${this.apiRoutes.uploadMediaAttachment}`;
return this.httpClient.post<Attachment>(route, input, { headers: headers }).toPromise(); const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` });
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
@ -741,4 +768,4 @@ export class FollowingResult {
constructor( constructor(
public maxId: string, public maxId: string,
public follows: Account[]) { } public follows: Account[]) { }
} }

View File

@ -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';