Skip to content

Commit a3f7386

Browse files
committed
feat(storage): percentageChanges() and downloadURL()
1 parent 96a6732 commit a3f7386

File tree

3 files changed

+45
-8
lines changed

3 files changed

+45
-8
lines changed

src/storage/ref.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,24 @@
11
import { storage } from 'firebase/app';
2-
import { createUploadTask } from './task';
2+
import { createUploadTask, AngularFireUploadTask } from './task';
33
import { Observable } from 'rxjs/Observable';
44
import { from } from 'rxjs/observable/from';
55

6+
export interface AngularFireStorageReference {
7+
getDownloadURL(): Observable<any>;
8+
getMetadata(): Observable<any>;
9+
delete(): Observable<any>;
10+
child(path: string): any;
11+
updateMetatdata(meta: storage.SettableMetadata): Observable<any>;
12+
put(data: any, metadata?: storage.UploadMetadata | undefined): AngularFireUploadTask;
13+
putString(data: string, format?: string | undefined, metadata?: storage.UploadMetadata | undefined): AngularFireUploadTask;
14+
}
15+
616
/**
717
* Create an AngularFire wrapped Storage Reference. This object
818
* creates observable methods from promise based methods.
919
* @param ref
1020
*/
11-
export function createStorageRef(ref: storage.Reference) {
21+
export function createStorageRef(ref: storage.Reference): AngularFireStorageReference {
1222
return {
1323
getDownloadURL() { return from(ref.getDownloadURL()); },
1424
getMetadata() { return from(ref.getMetadata()) },

src/storage/storage.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Injectable } from '@angular/core';
22
import { storage } from 'firebase/app';
33
import { FirebaseApp } from 'angularfire2';
4-
import { createStorageRef } from './ref';
5-
import { createUploadTask } from './task';
4+
import { createStorageRef, AngularFireStorageReference } from './ref';
5+
import { createUploadTask, AngularFireUploadTask } from './task';
66
import { Observable } from 'rxjs/Observable';
77

88
/**

src/storage/task.ts

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,43 @@
11
import { storage } from 'firebase/app';
22
import { fromTask } from './observable/fromTask';
33
import { Observable } from 'rxjs/Observable';
4+
import { map, filter } from 'rxjs/operators';
45

5-
export function createUploadTask(task: storage.UploadTask) {
6-
return {
7-
snapshotChanges() { return fromTask(task); },
6+
export interface AngularFireUploadTask {
7+
snapshotChanges(): Observable<storage.UploadTaskSnapshot | undefined>;
8+
percentageChanges(): Observable<number | undefined>;
9+
downloadURL(): Observable<string | null>;
10+
pause(): boolean;
11+
cancel(): boolean;
12+
resume(): boolean;
13+
then(): Promise<any>;
14+
catch(onRejected: (a: Error) => any): Promise<any>;
15+
}
16+
17+
export function createUploadTask(task: storage.UploadTask): AngularFireUploadTask {
18+
return {
819
pause() { return task.pause(); },
920
cancel() { return task.cancel(); },
1021
resume() { return task.resume(); },
1122
then() { return task.then(); },
1223
catch(onRejected: (a: Error) => any) {
1324
return task.catch(onRejected);
14-
}
25+
},
26+
snapshotChanges() { return fromTask(task); },
27+
percentageChanges() {
28+
return fromTask(task).pipe(
29+
filter(s => s !== undefined),
30+
map(s => {
31+
return s!.bytesTransferred / s!.totalBytes * 100;
32+
})
33+
);
34+
},
35+
downloadURL() {
36+
return fromTask(task).pipe(
37+
filter(s => s !== undefined),
38+
filter(s => s!.bytesTransferred === s!.totalBytes),
39+
map(s => s!.downloadURL)
40+
);
41+
}
1542
};
1643
}

0 commit comments

Comments
 (0)