54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import RNFetchBlob, { FetchBlobResponse } from 'rn-fetch-blob';
|
|
import FileViewer from 'react-native-file-viewer';
|
|
|
|
import EventEmitter from '../events';
|
|
import { LISTENER } from '../../containers/Toast';
|
|
import I18n from '../../i18n';
|
|
import { DOCUMENTS_PATH, DOWNLOAD_PATH } from '../../lib/constants';
|
|
import { IAttachment } from '../../definitions/IAttachment';
|
|
|
|
export const getLocalFilePathFromFile = (localPath: string, attachment: IAttachment): string => `${localPath}${attachment.title}`;
|
|
|
|
export const fileDownload = (url: string, attachment: IAttachment): Promise<FetchBlobResponse> => {
|
|
const path = getLocalFilePathFromFile(DOWNLOAD_PATH, attachment);
|
|
|
|
const options = {
|
|
path,
|
|
timeout: 10000,
|
|
indicator: true,
|
|
overwrite: true,
|
|
addAndroidDownloads: {
|
|
path,
|
|
notification: true,
|
|
useDownloadManager: true
|
|
}
|
|
};
|
|
|
|
return RNFetchBlob.config(options).fetch('GET', url);
|
|
};
|
|
|
|
export const fileDownloadAndPreview = async (url: string, attachment: IAttachment): Promise<void> => {
|
|
try {
|
|
const path = getLocalFilePathFromFile(DOCUMENTS_PATH, attachment);
|
|
const file = await RNFetchBlob.config({
|
|
timeout: 10000,
|
|
indicator: true,
|
|
path
|
|
}).fetch('GET', url);
|
|
|
|
FileViewer.open(file.data, {
|
|
showOpenWithDialog: true,
|
|
showAppsSuggestions: true
|
|
})
|
|
.then(res => res)
|
|
.catch(async () => {
|
|
const file = await fileDownload(url, attachment);
|
|
file
|
|
? EventEmitter.emit(LISTENER, { message: I18n.t('Downloaded_file') })
|
|
: EventEmitter.emit(LISTENER, { message: I18n.t('Error_Download_file') });
|
|
});
|
|
} catch (e) {
|
|
EventEmitter.emit(LISTENER, { message: I18n.t('Error_Download_file') });
|
|
}
|
|
};
|