1
+ /* @flow */
1
2
2
3
import { NativeModules , NativeEventEmitter } from 'react-native' ;
3
4
const FirestackStorage = NativeModules . FirestackStorage ;
@@ -13,17 +14,22 @@ class StorageRef extends ReferenceBase {
13
14
this . storage = storage ;
14
15
}
15
16
16
- downloadUrl ( ) {
17
+ downloadUrl ( ) : Promise < Object > {
17
18
const path = this . pathToString ( ) ;
18
- return promisify ( 'downloadUrl' , FirestackStorage ) ( this . storage . storageUrl , path ) ;
19
+ this . log . debug ( 'downloadUrl(' , path , ')' ) ;
20
+ return promisify ( 'downloadUrl' , FirestackStorage ) ( this . storage . storageUrl , path )
21
+ . catch ( err => {
22
+ this . log . error ( 'Error downloading URL for ' , path , '. Error: ' , err ) ;
23
+ throw err ;
24
+ } ) ;
19
25
}
20
26
21
27
/**
22
28
* Downloads a reference to the device
23
29
* @param {String } downloadPath Where to store the file
24
30
* @return {Promise }
25
31
*/
26
- download ( downloadPath , cb ) {
32
+ download ( downloadPath : string , cb : ( evt : Object ) = > Object ) : Promise < Object > {
27
33
let callback = cb ;
28
34
if ( ! callback || typeof callback !== 'function' ) {
29
35
callback = ( evt ) => { } ;
@@ -35,20 +41,25 @@ class StorageRef extends ReferenceBase {
35
41
listeners . push ( this . storage . _addListener ( 'download_resumed' , callback ) ) ;
36
42
37
43
const path = this . pathToString ( ) ;
44
+ this . log . debug ( 'download(' , path , ') -> ' , downloadPath ) ;
38
45
return promisify ( 'downloadFile' , FirestackStorage ) ( this . storage . storageUrl , path , downloadPath )
39
46
. then ( ( res ) => {
40
- console . log ( 'res --->' , res ) ;
41
- listeners . forEach ( this . storage . _removeListener ) ;
47
+ this . log . debug ( 'res --->' , res ) ;
48
+ listeners . forEach ( listener => listener . remove ( ) ) ;
42
49
return res ;
43
50
} )
44
51
. catch ( err => {
45
- console . log ( 'Got an error ->' , err ) ;
46
- } )
52
+ this . log . error ( 'Error downloading ' , path , ' to ' , downloadPath , '. Error: ' , err ) ;
53
+ throw err ;
54
+ } ) ;
47
55
}
48
56
}
49
57
58
+ type StorageOptionsType = {
59
+ storageBucket ?: ?string ,
60
+ } ;
50
61
export default class Storage extends Base {
51
- constructor ( firestack , options = { } ) {
62
+ constructor ( firestack : Object , options : StorageOptionsType = { } ) {
52
63
super ( firestack , options ) ;
53
64
54
65
if ( this . options . storageBucket ) {
@@ -58,8 +69,8 @@ export default class Storage extends Base {
58
69
this . refs = { } ;
59
70
}
60
71
61
- ref ( ...path ) {
62
- const key = this . _pathKey ( path ) ;
72
+ ref ( ...path : Array < string > ) : StorageRef {
73
+ const key = this . _pathKey ( ... path ) ;
63
74
if ( ! this . refs [ key ] ) {
64
75
const ref = new StorageRef ( this , path ) ;
65
76
this . refs [ key ] = ref ;
@@ -74,43 +85,45 @@ export default class Storage extends Base {
74
85
* @param {object } metadata An object containing metadata
75
86
* @return {Promise }
76
87
*/
77
- uploadFile ( name , filepath , metadata = { } , cb ) {
88
+ uploadFile ( name : string , filepath : string , metadata : Object = { } , cb : ( evt : Object ) = > Object ) : Promise < Object > {
89
+ this. log . debug ( 'uploadFile(' , filepath , ') -> ' , name ) ;
78
90
let callback = cb ;
79
91
if ( ! callback || typeof callback !== 'function' ) {
80
- callback = ( evt ) => { }
92
+ callback = ( evt : Object ) = > ( { } ) ;
81
93
}
82
94
83
- filepath = filepath . replace ( " file://" , "" ) ;
95
+ filepath = filepath . replace ( ' file://' , '' ) ;
84
96
85
97
const listeners = [ ] ;
86
98
listeners . push ( this . _addListener ( 'upload_progress' , callback ) ) ;
87
99
listeners . push ( this . _addListener ( 'upload_paused' , callback ) ) ;
88
100
listeners . push ( this . _addListener ( 'upload_resumed' , callback ) ) ;
89
101
return promisify ( 'uploadFile' , FirestackStorage ) ( this . storageUrl , name , filepath , metadata )
90
102
. then ( ( res ) => {
91
- listeners . forEach ( this . _removeListener ) ;
103
+ listeners . forEach ( listener => listener . remove ( ) ) ;
92
104
return res ;
105
+ } )
106
+ . catch ( err => {
107
+ this . log . error ( 'Error uploading file ' , name , ' to ' , filepath , '. Error: ' , err ) ;
108
+ throw err ;
93
109
} ) ;
94
110
}
95
111
96
- getRealPathFromURI ( uri ) {
112
+ getRealPathFromURI ( uri : string ) : Promise < string > {
97
113
return promisify ( 'getRealPathFromURI' , FirestackStorage ) ( uri ) ;
98
114
}
99
115
100
- _addListener ( evt , cb ) {
101
- return FirestackStorageEvt . addListener ( evt , cb ) ;
102
- }
103
-
104
- _removeListener ( evt ) {
105
- return FirestackStorageEvt . removeListener ( evt ) ;
116
+ _addListener ( evt : string , cb : ( evt : Object ) = > Object ) : { remove : ( ) = > void } {
117
+ let listener = FirestackStorageEvt . addListener ( evt , cb ) ;
118
+ return listener ;
106
119
}
107
120
108
- setStorageUrl ( url ) {
121
+ setStorageUrl ( url : string ) : void {
109
122
// return promisify('setStorageUrl', FirestackStorage)(url);
110
123
this . storageUrl = `gs://${ url } ` ;
111
124
}
112
125
113
- _pathKey ( ...path ) {
126
+ _pathKey ( ...path : Array < string > ) : string {
114
127
return path . join ( '-' ) ;
115
128
}
116
129
@@ -126,7 +139,7 @@ export default class Storage extends Base {
126
139
'FILETYPE_DIRECTORY' : FirestackStorage . FILETYPE_DIRECTORY
127
140
} ;
128
141
129
- get namespace ( ) {
142
+ get namespace ( ) : string {
130
143
return 'firestack :storage '
131
144
}
132
145
}
0 commit comments