2017-02-14 11:31:42 +00:00
|
|
|
/* @flow */
|
2017-06-30 16:23:32 +00:00
|
|
|
import { NativeModules } from 'react-native';
|
2017-02-14 11:31:42 +00:00
|
|
|
|
|
|
|
import StorageRef from './reference';
|
2017-06-30 16:23:32 +00:00
|
|
|
import ModuleBase from './../../utils/ModuleBase';
|
2017-02-14 11:31:42 +00:00
|
|
|
|
2017-03-02 13:09:41 +00:00
|
|
|
const FirebaseStorage = NativeModules.RNFirebaseStorage;
|
2017-02-14 11:31:42 +00:00
|
|
|
|
2017-06-30 16:23:32 +00:00
|
|
|
export default class Storage extends ModuleBase {
|
2017-08-17 16:58:28 +00:00
|
|
|
static _NAMESPACE = 'storage';
|
|
|
|
static _NATIVE_MODULE = 'RNFirebaseStorage';
|
2017-03-23 00:54:19 +00:00
|
|
|
/**
|
|
|
|
*
|
2017-06-30 16:23:32 +00:00
|
|
|
* @param firebaseApp
|
2017-03-23 00:54:19 +00:00
|
|
|
* @param options
|
|
|
|
*/
|
2017-06-30 16:23:32 +00:00
|
|
|
constructor(firebaseApp: Object, options: Object = {}) {
|
2017-08-17 16:58:28 +00:00
|
|
|
super(firebaseApp, options, true);
|
2017-06-30 16:23:32 +00:00
|
|
|
this._subscriptions = {};
|
2017-05-25 22:39:06 +00:00
|
|
|
|
2017-07-12 14:49:33 +00:00
|
|
|
this.addListener(
|
|
|
|
this._getAppEventName('storage_event'),
|
|
|
|
this._handleStorageEvent.bind(this),
|
2017-02-14 11:31:42 +00:00
|
|
|
);
|
|
|
|
|
2017-07-12 14:49:33 +00:00
|
|
|
this.addListener(
|
|
|
|
this._getAppEventName('storage_error'),
|
|
|
|
this._handleStorageEvent.bind(this),
|
2017-02-14 11:31:42 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2017-03-23 00:54:19 +00:00
|
|
|
/**
|
|
|
|
* Returns a reference for the given path in the default bucket.
|
|
|
|
* @url https://firebase.google.com/docs/reference/js/firebase.storage.Storage#ref
|
|
|
|
* @param path
|
|
|
|
* @returns {StorageReference}
|
|
|
|
*/
|
2017-02-14 11:31:42 +00:00
|
|
|
ref(path: string): StorageRef {
|
|
|
|
return new StorageRef(this, path);
|
|
|
|
}
|
|
|
|
|
2017-03-23 00:54:19 +00:00
|
|
|
/**
|
|
|
|
* Returns a reference for the given absolute URL.
|
|
|
|
* @url https://firebase.google.com/docs/reference/js/firebase.storage.Storage#refFromURL
|
|
|
|
* @param url
|
|
|
|
* @returns {StorageReference}
|
|
|
|
*/
|
2017-02-14 11:31:42 +00:00
|
|
|
refFromURL(url: string): Promise<StorageRef> {
|
2017-03-23 00:54:19 +00:00
|
|
|
// TODO don't think this is correct?
|
2017-02-14 11:31:42 +00:00
|
|
|
return new StorageRef(this, `url::${url}`);
|
|
|
|
}
|
|
|
|
|
2017-03-23 00:54:19 +00:00
|
|
|
/**
|
|
|
|
* setMaxOperationRetryTime
|
|
|
|
* @url https://firebase.google.com/docs/reference/js/firebase.storage.Storage#setMaxOperationRetryTime
|
|
|
|
* @param time The new maximum operation retry time in milliseconds.
|
|
|
|
*/
|
2017-02-14 11:31:42 +00:00
|
|
|
setMaxOperationRetryTime(time: number) {
|
2017-06-30 16:23:32 +00:00
|
|
|
this._native.setMaxOperationRetryTime(time);
|
2017-02-14 11:31:42 +00:00
|
|
|
}
|
|
|
|
|
2017-03-23 00:54:19 +00:00
|
|
|
/**
|
|
|
|
* setMaxUploadRetryTime
|
|
|
|
* @url https://firebase.google.com/docs/reference/js/firebase.storage.Storage#setMaxUploadRetryTime
|
|
|
|
* @param time The new maximum upload retry time in milliseconds.
|
|
|
|
*/
|
2017-02-14 11:31:42 +00:00
|
|
|
setMaxUploadRetryTime(time: number) {
|
2017-06-30 16:23:32 +00:00
|
|
|
this._native.setMaxUploadRetryTime(time);
|
2017-02-14 11:31:42 +00:00
|
|
|
}
|
|
|
|
|
2017-03-23 00:54:19 +00:00
|
|
|
/**
|
|
|
|
* setMaxDownloadRetryTime
|
|
|
|
* @url N/A
|
|
|
|
* @param time The new maximum download retry time in milliseconds.
|
|
|
|
*/
|
2017-02-14 11:31:42 +00:00
|
|
|
setMaxDownloadRetryTime(time: number) {
|
2017-06-30 16:23:32 +00:00
|
|
|
this._native.setMaxDownloadRetryTime(time);
|
2017-02-14 11:31:42 +00:00
|
|
|
}
|
|
|
|
|
2017-03-23 00:54:19 +00:00
|
|
|
/** **********
|
|
|
|
* INTERNALS
|
|
|
|
********** **/
|
2017-07-12 14:49:33 +00:00
|
|
|
_getSubEventName(path, eventName) {
|
|
|
|
return this._getAppEventName(`${path}-${eventName}`);
|
|
|
|
}
|
2017-03-23 00:54:19 +00:00
|
|
|
|
2017-02-14 11:31:42 +00:00
|
|
|
_handleStorageEvent(event: Object) {
|
|
|
|
const { path, eventName } = event;
|
|
|
|
const body = event.body || {};
|
|
|
|
|
|
|
|
this.log.debug('_handleStorageEvent: ', path, eventName, body);
|
2017-07-12 14:49:33 +00:00
|
|
|
this.emit(this._getSubEventName(path, eventName), body);
|
2017-02-14 11:31:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_handleStorageError(err: Object) {
|
2017-07-12 14:49:33 +00:00
|
|
|
const { path, eventName } = event;
|
|
|
|
const body = event.body || {};
|
|
|
|
|
2017-02-14 11:31:42 +00:00
|
|
|
this.log.debug('_handleStorageError ->', err);
|
2017-07-12 14:49:33 +00:00
|
|
|
this.emit(this._getSubEventName(path, eventName), body);
|
2017-02-14 11:31:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_addListener(path: string, eventName: string, cb: (evt: Object) => Object) {
|
2017-07-12 14:49:33 +00:00
|
|
|
this.on(this._getSubEventName(path, eventName), cb);
|
2017-02-14 11:31:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
_removeListener(path: string, eventName: string, origCB: (evt: Object) => Object) {
|
2017-07-12 14:49:33 +00:00
|
|
|
this.removeListener(this._getSubEventName(path, eventName), origCB);
|
2017-02-14 11:31:42 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-03-22 20:15:02 +00:00
|
|
|
export const statics = {
|
|
|
|
TaskEvent: {
|
|
|
|
STATE_CHANGED: 'state_changed',
|
|
|
|
},
|
|
|
|
TaskState: {
|
2017-03-22 23:23:48 +00:00
|
|
|
RUNNING: 'running',
|
|
|
|
PAUSED: 'paused',
|
|
|
|
SUCCESS: 'success',
|
|
|
|
CANCELLED: 'cancelled',
|
|
|
|
ERROR: 'error',
|
2017-03-22 20:15:02 +00:00
|
|
|
},
|
2017-05-31 14:45:14 +00:00
|
|
|
Native: FirebaseStorage ? {
|
2017-03-22 23:20:57 +00:00
|
|
|
MAIN_BUNDLE_PATH: FirebaseStorage.MAIN_BUNDLE_PATH,
|
|
|
|
CACHES_DIRECTORY_PATH: FirebaseStorage.CACHES_DIRECTORY_PATH,
|
|
|
|
DOCUMENT_DIRECTORY_PATH: FirebaseStorage.DOCUMENT_DIRECTORY_PATH,
|
|
|
|
EXTERNAL_DIRECTORY_PATH: FirebaseStorage.EXTERNAL_DIRECTORY_PATH,
|
|
|
|
EXTERNAL_STORAGE_DIRECTORY_PATH: FirebaseStorage.EXTERNAL_STORAGE_DIRECTORY_PATH,
|
|
|
|
TEMP_DIRECTORY_PATH: FirebaseStorage.TEMP_DIRECTORY_PATH,
|
|
|
|
LIBRARY_DIRECTORY_PATH: FirebaseStorage.LIBRARY_DIRECTORY_PATH,
|
|
|
|
FILETYPE_REGULAR: FirebaseStorage.FILETYPE_REGULAR,
|
|
|
|
FILETYPE_DIRECTORY: FirebaseStorage.FILETYPE_DIRECTORY,
|
2017-05-31 14:45:14 +00:00
|
|
|
} : {},
|
2017-03-22 20:15:02 +00:00
|
|
|
};
|