From 9a0f56c36e42311b150f611066017d7b1966c410 Mon Sep 17 00:00:00 2001 From: Lastorder <18280396+Lastorder-DC@users.noreply.github.com> Date: Sun, 13 Aug 2023 11:02:39 +0900 Subject: [PATCH] Fix #606 Stop using v1 media endpoint --- src/app/services/mastodon.service.ts | 44 +++++++++++++++++++------ src/app/services/models/api.settings.ts | 2 +- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/app/services/mastodon.service.ts b/src/app/services/mastodon.service.ts index e4ce63b2..532e311c 100644 --- a/src/app/services/mastodon.service.ts +++ b/src/app/services/mastodon.service.ts @@ -376,16 +376,40 @@ export class MastodonService { } uploadMediaAttachment(account: AccountInfo, file: File, description: string): Promise { - let input = new FormData(); - input.append('file', file); - if (description !== null && description !== undefined) { - input.append('description', description); - } else { - input.append('description', ''); - } - const route = `https://${account.instance}${this.apiRoutes.uploadMediaAttachment}`; - const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` }); - return this.httpClient.post(route, input, { headers: headers }).toPromise(); + return new Promise((resolve, reject) => { + let input = new FormData(); + input.append('file', file); + if (description !== null && description !== undefined) { + input.append('description', description); + } else { + input.append('description', ''); + } + const route = `https://${account.instance}${this.apiRoutes.uploadMediaAttachment}`; + const headers = new HttpHeaders({ 'Authorization': `Bearer ${account.token.access_token}` }); + + this.httpClient.post(route, input, { headers: headers, observe: 'response' }) + .subscribe(response => { + if (response.status === 202) { + const checkMediaStatus = () => { + this.httpClient.get(`https://${account.instance}${this.apiRoutes.updateMediaAttachment.replace('{0}', response.body.id)}`, { headers: headers }) + .subscribe(mediaStatus => { + if (mediaStatus.url) { + resolve(mediaStatus); + } else { + setTimeout(checkMediaStatus, 1000); + } + }, error => { + reject(error); + }); + }; + checkMediaStatus(); + } else { + resolve(response.body); + } + }, error => { + reject(error); + }); + }); } //TODO: add focus support diff --git a/src/app/services/models/api.settings.ts b/src/app/services/models/api.settings.ts index 3a204317..0dc7337f 100644 --- a/src/app/services/models/api.settings.ts +++ b/src/app/services/models/api.settings.ts @@ -26,7 +26,7 @@ export class ApiRoutes { followRemote = '/api/v1/follows'; getInstance = '/api/v1/instance'; getInstancev2 = '/api/v2/instance'; - uploadMediaAttachment = '/api/v1/media'; + uploadMediaAttachment = '/api/v2/media'; updateMediaAttachment = '/api/v1/media/{0}'; getMutes = '/api/v1/mutes'; getNotifications = '/api/v1/notifications';