changeset 192:e4f38975c2bc

Introduce interface for reading a file, once again avoiding specific browser implementation.
author Lucas Thompson <dev@lucas.im>
date Thu, 23 Mar 2017 15:42:34 +0000
parents ea735ebeed0e
children ac57ddba8ba9
files src/app/app.module.ts src/app/services/audio-player/audio-player.service.ts
diffstat 2 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/app/app.module.ts	Thu Mar 23 11:38:22 2017 +0000
+++ b/src/app/app.module.ts	Thu Mar 23 15:42:34 2017 +0000
@@ -10,7 +10,7 @@
 import { PlaybackControlComponent } from './playback-control/playback-control.component';
 import {
   AudioPlayerService,
-  UrlResourceLifetimeManager
+  UrlResourceLifetimeManager, ResourceReader
 } from "./services/audio-player/audio-player.service";
 import { FeatureExtractionService } from "./services/feature-extraction/feature-extraction.service";
 import { FeatureExtractionMenuComponent } from "./feature-extraction-menu/feature-extraction-menu.component";
@@ -73,6 +73,19 @@
   }
 };
 
+export const readResource: ResourceReader = (resource) => {
+  return new Promise((res, rej) => {
+    const reader: FileReader = new FileReader();
+    reader.onload = (event: any) => {
+      res(event.target.result);
+    };
+    reader.onerror = (event) => {
+      rej(event.message);
+    };
+    reader.readAsArrayBuffer(resource);
+  });
+};
+
 @NgModule({
   declarations: [
     AppComponent,
@@ -100,7 +113,8 @@
     FeatureExtractionService,
     {provide: 'MediaRecorderFactory', useFactory: createMediaRecorderFactory},
     {provide: 'PiperRepoUri', useValue: 'assets/remote-plugins.json'},
-    {provide: 'UrlResourceLifetimeManager', useValue: urlResourceManager}
+    {provide: 'UrlResourceLifetimeManager', useValue: urlResourceManager},
+    {provide: 'ResourceReader', useValue: readResource}
   ],
   bootstrap: [AppComponent]
 })
--- a/src/app/services/audio-player/audio-player.service.ts	Thu Mar 23 11:38:22 2017 +0000
+++ b/src/app/services/audio-player/audio-player.service.ts	Thu Mar 23 15:42:34 2017 +0000
@@ -7,6 +7,7 @@
   revokeUrlToResource(url: string): void;
 }
 
+export type ResourceReader = (resource: File | Blob) => Promise<ArrayBuffer>;
 @Injectable()
 export class AudioPlayerService {
 
@@ -18,6 +19,7 @@
 
   constructor(@Inject(HTMLAudioElement) private audioElement: HTMLAudioElement /* TODO probably shouldn't play audio this way */,
               @Inject('AudioContext') private audioContext: AudioContext,
+              @Inject('ResourceReader') private readResource: ResourceReader,
               @Inject(
                 'UrlResourceLifetimeManager'
               ) private resourceManager: UrlResourceLifetimeManager) {