UNPKG

@bigin/ns-firebase

Version:
216 lines (215 loc) 6.6 kB
import { firebase } from '../firebase-common'; import { ListResult as ListResultBase } from './storage-common'; function getReference(nativeReference, listOptions) { return { ios: nativeReference, bucket: nativeReference.bucket, name: nativeReference.name, fullPath: nativeReference.fullPath, listAll: () => listAll({ remoteFullPath: nativeReference.fullPath, bucket: listOptions.bucket }), }; } function getReferences(nativeReferences, listOptions) { const references = []; for (let i = 0, l = nativeReferences.count; i < l; i++) { const ref = nativeReferences.objectAtIndex(i); references.push(getReference(ref, listOptions)); } return references; } class ListResult extends ListResultBase { constructor(listResult, listOptions) { super(getReferences(listResult.items, listOptions), getReferences(listResult.prefixes, listOptions), listResult.pageToken); this.listResult = listResult; this.listOptions = listOptions; this.ios = listResult; delete this.listResult; delete this.listOptions; } } function getStorageRef(reject, arg) { if (typeof FIRStorage === 'undefined') { reject("Uncomment Storage in the plugin's Podfile first"); return undefined; } if (!arg.remoteFullPath) { reject('remoteFullPath is mandatory'); return undefined; } if (arg.bucket) { return FIRStorage.storage().referenceForURL(arg.bucket); } else if (firebase.storageBucket) { return firebase.storageBucket; } else { return FIRStorage.storage().reference(); } } export function uploadFile(arg) { return new Promise((resolve, reject) => { try { const onCompletion = (metadata, error) => { if (error) { reject(error.localizedDescription); } else { resolve({ name: metadata.name, contentType: metadata.contentType, created: metadata.timeCreated, updated: metadata.updated, bucket: metadata.bucket, size: metadata.size, }); } }; const storageRef = getStorageRef(reject, arg); if (!storageRef) { return; } const fIRStorageReference = storageRef.child(arg.remoteFullPath); let fIRStorageUploadTask = null; let metadata = null; if (arg.metadata) { metadata = FIRStorageMetadata.new(); metadata.cacheControl = arg.metadata.cacheControl; metadata.contentDisposition = arg.metadata.contentDisposition; metadata.contentEncoding = arg.metadata.contentEncoding; metadata.contentLanguage = arg.metadata.contentLanguage; metadata.contentType = arg.metadata.contentType; if (arg.metadata.customMetadata) { const customMetadata = NSMutableDictionary.new(); for (let p in arg.metadata.customMetadata) { customMetadata.setObjectForKey(arg.metadata.customMetadata[p], p); } metadata.customMetadata = customMetadata; } } if (arg.localFile) { if (typeof arg.localFile !== 'object') { reject('localFile argument must be a File object; use file-system module to create one'); return; } fIRStorageUploadTask = fIRStorageReference.putFileMetadataCompletion(NSURL.fileURLWithPath(arg.localFile.path), metadata, onCompletion); } else if (arg.localFullPath) { fIRStorageUploadTask = fIRStorageReference.putFileMetadataCompletion(NSURL.fileURLWithPath(arg.localFullPath), metadata, onCompletion); } else { reject('One of localFile or localFullPath is required'); return; } if (fIRStorageUploadTask !== null) { fIRStorageUploadTask.observeStatusHandler(2, (snapshot) => { if (!snapshot.error && typeof arg.onProgress === 'function') { arg.onProgress({ fractionCompleted: snapshot.progress.fractionCompleted, percentageCompleted: Math.round(snapshot.progress.fractionCompleted * 100), }); } }); } } catch (ex) { console.log('Error in firebase.uploadFile: ' + ex); reject(ex); } }); } export function downloadFile(arg) { return new Promise((resolve, reject) => { try { const onCompletion = (url, error) => { if (error) { reject(error.localizedDescription); } else { resolve(url.absoluteString); } }; const storageRef = getStorageRef(reject, arg); if (!storageRef) { return; } const fIRStorageReference = storageRef.child(arg.remoteFullPath); let localFilePath; if (arg.localFile) { if (typeof arg.localFile !== 'object') { reject('localFile argument must be a File object; use file-system module to create one'); return; } localFilePath = arg.localFile.path; } else if (arg.localFullPath) { localFilePath = arg.localFullPath; } else { reject('One of localFile or localFullPath is required'); return; } const localFileUrl = NSURL.fileURLWithPath(localFilePath); fIRStorageReference.writeToFileCompletion(localFileUrl, onCompletion); } catch (ex) { console.log('Error in firebase.downloadFile: ' + ex); reject(ex); } }); } export function getDownloadUrl(arg) { return new Promise((resolve, reject) => { try { const onCompletion = (url, error) => { if (error) { reject(error.localizedDescription); } else { resolve(url.absoluteString); } }; const storageRef = getStorageRef(reject, arg); if (!storageRef) { return; } const fIRStorageReference = storageRef.child(arg.remoteFullPath); fIRStorageReference.downloadURLWithCompletion(onCompletion); } catch (ex) { console.log('Error in firebase.getDownloadUrl: ' + ex); reject(ex); } }); } export function deleteFile(arg) { return new Promise((resolve, reject) => { try { const onCompletion = (error) => { if (error) { reject(error.localizedDescription); } else { resolve(); } }; const storageRef = getStorageRef(reject, arg); if (!storageRef) { return; } const fIRStorageFileRef = storageRef.child(arg.remoteFullPath); fIRStorageFileRef.deleteWithCompletion(onCompletion); } catch (ex) { console.log('Error in firebase.deleteFile: ' + ex); reject(ex); } }); } export function listAll(listOptions) { return new Promise((resolve, reject) => { try { const storageRef = getStorageRef(reject, listOptions); if (!storageRef) { return; } const fIRStorageReference = storageRef.child(listOptions.remoteFullPath); fIRStorageReference.listAllWithCompletion((result, error) => { if (error) { reject(error.localizedDescription); } else { resolve(new ListResult(result, listOptions)); } }); } catch (ex) { console.log('Error in firebase.listAll: ' + ex); reject(ex); } }); } //# sourceMappingURL=storage.ios.js.map