Mercurial > hg > ugly-duckling
diff src/app/analysis-item/analysis-item.component.ts @ 456:7bb0bac6f8dc
Add export button for recordings and option to remove audio item (also removes all related analyses atm). Revokes associated object url for audio on removal. Will be problematic if the history is used for undo / redo.
author | Lucas Thompson <dev@lucas.im> |
---|---|
date | Thu, 29 Jun 2017 20:11:14 +0100 |
parents | 8113b6f5a75e |
children | ccce2c09502e |
line wrap: on
line diff
--- a/src/app/analysis-item/analysis-item.component.ts Thu Jun 29 20:09:11 2017 +0100 +++ b/src/app/analysis-item/analysis-item.component.ts Thu Jun 29 20:11:14 2017 +0100 @@ -6,7 +6,9 @@ Component, Input, OnDestroy, - OnInit + OnInit, + Output, + EventEmitter } from '@angular/core'; import {naivePagingMapper} from '../visualisations/WavesJunk'; import {OnSeekHandler} from '../playhead/PlayHeadHelpers'; @@ -19,6 +21,7 @@ RenderLoopService, TaskRemover } from '../services/render-loop/render-loop.service'; +import {DomSanitizer} from '@angular/platform-browser'; export interface Item { id: string; @@ -31,6 +34,7 @@ export interface PendingRootAudioItem extends Item { uri: string; mimeType?: string; + isExportable?: boolean; } export interface RootAudioItem extends PendingRootAudioItem { audioData: AudioBuffer; @@ -115,13 +119,17 @@ @Input() item: Item; @Input() contentWidth: number; @Input() onSeek: OnSeekHandler; + @Output() remove: EventEmitter<Item>; // TODO move / re-think - naivePagingMapper feels like a big ol' bodge private removeAnimation: TaskRemover; private hasProgressOnInit = false; private mIsActive: boolean; private mTimeline: Timeline; - constructor(private renderLoop: RenderLoopService) {} + constructor(private renderLoop: RenderLoopService, + private sanitizer: DomSanitizer) { + this.remove = new EventEmitter<Item>(); + } ngOnInit(): void { this.resetRemoveAnimation(); @@ -164,6 +172,18 @@ this.removeAnimation(); } + private sanitize(url: string) { + return this.sanitizer.bypassSecurityTrustUrl(url); + } + + private generateFilename(item: PendingRootAudioItem): string { + // TODO this is too brittle, and will often produce the wrong result + // i.e. audio/mpeg results in .mpeg, when .mp3 is likely desired + const mimeParts = item.mimeType ? item.mimeType.split('/') : []; + const extension = mimeParts.length === 2 ? mimeParts[1] : ''; + return `${item.title}.${extension}`; + } + private resetRemoveAnimation(): void { if (this.removeAnimation) { this.removeAnimation();