From 6a7d389b55d6e8133b85f286ba8ef612f28f6f4f Mon Sep 17 00:00:00 2001 From: Nicolas Constant Date: Sun, 17 May 2020 16:26:33 -0400 Subject: [PATCH] keep cache for media for d&rd, fix #281 --- .../create-status/create-status.component.ts | 10 ++++++++-- src/app/services/media.service.ts | 12 ++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/app/components/create-status/create-status.component.ts b/src/app/components/create-status/create-status.component.ts index ec26f747..8a506483 100644 --- a/src/app/components/create-status/create-status.component.ts +++ b/src/app/components/create-status/create-status.component.ts @@ -17,7 +17,7 @@ import { NotificationService } from '../../services/notification.service'; import { StatusWrapper } from '../../models/common.model'; import { AccountInfo } from '../../states/accounts.state'; import { InstancesInfoService } from '../../services/instances-info.service'; -import { MediaService } from '../../services/media.service'; +import { MediaService, MediaWrapper } from '../../services/media.service'; import { AutosuggestSelection, AutosuggestUserActionEnum } from './autosuggest/autosuggest.component'; import { EmojiPickerComponent } from './emoji-picker/emoji-picker.component'; import { PollEditorComponent } from './poll-editor/poll-editor.component'; @@ -79,8 +79,14 @@ export class CreateStatusComponent implements OnInit, OnDestroy { @Input('redraftedStatus') set redraftedStatus(value: StatusWrapper) { - if (value) { + if (value) { this.statusLoaded = false; + + if(value.status && value.status.media_attachments){ + for (const m of value.status.media_attachments) { + this.mediaService.addExistingMedia(new MediaWrapper(m.id, null, m)); + } + } const newLine = String.fromCharCode(13, 10); let content = value.status.content; diff --git a/src/app/services/media.service.ts b/src/app/services/media.service.ts index 06015580..0fe3d9ab 100644 --- a/src/app/services/media.service.ts +++ b/src/app/services/media.service.ts @@ -12,6 +12,7 @@ import { NotificationService } from './notification.service'; }) export class MediaService { mediaSubject: BehaviorSubject = new BehaviorSubject([]); + fileCache: { [url: string]: File } = {}; constructor( private readonly notificationService: NotificationService, @@ -36,6 +37,7 @@ export class MediaService { this.mastodonService.uploadMediaAttachment(account, file, null) .then((attachment: Attachment) => { + this.fileCache[attachment.url] = file; let currentMedias = this.mediaSubject.value; let currentMedia = currentMedias.filter(x => x.id === uniqueId)[0]; if (currentMedia) { @@ -64,6 +66,15 @@ export class MediaService { }); } + addExistingMedia(media: MediaWrapper){ + if(!this.fileCache[media.attachment.url]) return; + + media.file = this.fileCache[media.attachment.url]; + let medias = this.mediaSubject.value; + medias.push(media); + this.mediaSubject.next(medias); + } + remove(media: MediaWrapper) { let medias = this.mediaSubject.value; let filteredMedias = medias.filter(x => x.id !== media.id); @@ -84,6 +95,7 @@ export class MediaService { for (let media of medias) { this.mastodonService.uploadMediaAttachment(account, media.file, media.description) .then((attachment: Attachment) => { + this.fileCache[attachment.url] = media.file; let currentMedias = this.mediaSubject.value; let currentMedia = currentMedias.filter(x => x.id === media.id)[0]; if (currentMedia) {