Mercurial > hg > ugly-duckling
diff src/app/services/audio-player/audio-player.service.ts @ 191:ea735ebeed0e
Avoid using browser specific singleton directly - despite the fact this is likely always going to be run in a browser.
author | Lucas Thompson <dev@lucas.im> |
---|---|
date | Thu, 23 Mar 2017 11:38:22 +0000 |
parents | dd02ef0d3c93 |
children | e4f38975c2bc |
line wrap: on
line diff
--- a/src/app/services/audio-player/audio-player.service.ts Wed Mar 22 16:20:50 2017 +0000 +++ b/src/app/services/audio-player/audio-player.service.ts Thu Mar 23 11:38:22 2017 +0000 @@ -2,6 +2,11 @@ import {Subject} from "rxjs/Subject"; import {Observable} from "rxjs"; +export interface UrlResourceLifetimeManager { + createUrlToResource(resource: File | Blob): string; + revokeUrlToResource(url: string): void; +} + @Injectable() export class AudioPlayerService { @@ -12,7 +17,10 @@ seeked$: Observable<number>; constructor(@Inject(HTMLAudioElement) private audioElement: HTMLAudioElement /* TODO probably shouldn't play audio this way */, - @Inject('AudioContext') private audioContext: AudioContext) { + @Inject('AudioContext') private audioContext: AudioContext, + @Inject( + 'UrlResourceLifetimeManager' + ) private resourceManager: UrlResourceLifetimeManager) { this.currentObjectUrl = ''; this.playingStateChange = new Subject<boolean>(); this.playingStateChange$ = this.playingStateChange.asObservable(); @@ -40,7 +48,7 @@ loadAudioFromUrl(url: string): void { if (this.currentObjectUrl) - URL.revokeObjectURL(this.currentObjectUrl); + this.resourceManager.revokeUrlToResource(this.currentObjectUrl); this.currentObjectUrl = url; this.audioElement.pause(); this.audioElement.src = url;