From 5633eeb24dc38a5c81190e052ef8772d868e1593 Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Tue, 17 May 2022 18:58:10 -0700 Subject: [PATCH] 1.3.6-2 Test Build - Individual file uploads & cloudariny fixes. --- app.json | 6 +- .../local-upload-progress.component.jsx | 26 +++---- .../upload-progress.component.jsx | 14 ++-- util/document-upload.utility.js | 22 +++--- util/local-document-upload.utility.js | 69 +++++++++---------- 5 files changed, 69 insertions(+), 68 deletions(-) diff --git a/app.json b/app.json index 737eb40..807f30e 100644 --- a/app.json +++ b/app.json @@ -4,19 +4,19 @@ "slug": "imexmobile", "version": "1.3.6", "extra": { - "expover": "1" + "expover": "2" }, "orientation": "default", "icon": "./assets/logo192noa.png", "ios": { "supportsTablet": true, "bundleIdentifier": "com.imex.imexmobile", - "buildNumber": "1", + "buildNumber": "2", "googleServicesFile": "./GoogleService-Info.plist" }, "android": { "package": "com.imex.imexmobile", - "versionCode": 1100006, + "versionCode": 1100007, "googleServicesFile": "./google-services.json" }, "splash": { diff --git a/components/local-upload-progress/local-upload-progress.component.jsx b/components/local-upload-progress/local-upload-progress.component.jsx index e704476..bed59d8 100644 --- a/components/local-upload-progress/local-upload-progress.component.jsx +++ b/components/local-upload-progress/local-upload-progress.component.jsx @@ -70,7 +70,8 @@ export function UploadProgress({ Toast.show({ type: "success", text1: `${duration} - Upload completed for ${asset.filename}.`, - text2: duration, + // + // text2: duration, }); logImEXEvent("imexmobile_successful_upload"); @@ -82,6 +83,7 @@ export function UploadProgress({ ...progress.files, [id]: { ...progress.files[id], + percent: 1, action: t("mediabrowser.labels.converting"), }, }, @@ -92,7 +94,7 @@ export function UploadProgress({ function handleOnProgress(uri, percent, loaded) { setProgress((progress) => ({ ...progress, - speed: loaded - progress.files[uri].loaded, + // speed: loaded - progress.files[uri].loaded, action: percent === 1 ? t("mediabrowser.labels.converting") @@ -102,6 +104,7 @@ export function UploadProgress({ [uri]: { ...progress.files[uri], percent, + speed: loaded - progress.files[uri].loaded, action: percent === 1 ? t("mediabrowser.labels.converting") @@ -117,6 +120,7 @@ export function UploadProgress({ type: "error", text1: "Unable to upload documents.", text2: (error && error.message) || JSON.stringify(error), + autoHide: false, }); setProgress((progress) => ({ ...progress, @@ -236,18 +240,11 @@ export function UploadProgress({ visible={progress.uploadInProgress} animationType="slide" transparent={true} - onRequestClose={() => { - Alert.alert("Modal has been closed."); - }} + onRequestClose={() => {}} > {progress.loading && } - {progress.action && ( - {`${progress.action} ${ - (progress.speed !== 0 || !progress.speed) && - `- ${formatBytes(progress.speed)}/sec` - }`} - )} + {Object.keys(progress.files).map((key) => ( @@ -260,6 +257,11 @@ export function UploadProgress({ style={styles.progress} color={progress.files[key].percent === 1 ? "green" : "blue"} /> + {progress.files[key].speed !== 0 && + progress.files[key].speed && + !isNaN(progress.files[key].speed) ? ( + {`${formatBytes(progress.files[key].speed)}/sec`} + ) : null} ))} @@ -271,7 +273,7 @@ export function UploadProgress({ const styles = StyleSheet.create({ modal: { flex: 1, - marginTop: 50, + marginTop: 80, marginBottom: 60, marginLeft: 20, marginRight: 20, diff --git a/components/upload-progress/upload-progress.component.jsx b/components/upload-progress/upload-progress.component.jsx index 93ade3f..b76bdd2 100644 --- a/components/upload-progress/upload-progress.component.jsx +++ b/components/upload-progress/upload-progress.component.jsx @@ -75,6 +75,7 @@ export function UploadProgress({ ...progress.files, [id]: { ...progress.files[id], + percent: 1, action: t("mediabrowser.labels.converting"), }, }, @@ -95,6 +96,7 @@ export function UploadProgress({ [uri]: { ...progress.files[uri], percent, + speed: loaded - progress.files[uri].loaded, action: percent === 1 ? t("mediabrowser.labels.converting") @@ -248,12 +250,7 @@ export function UploadProgress({ > {progress.loading && } - {progress.action && ( - {`${progress.action} ${ - (progress.speed !== 0 || !progress.speed) && - `- ${formatBytes(progress.speed)}/sec` - }`} - )} + {Object.keys(progress.files).map((key) => ( @@ -266,6 +263,11 @@ export function UploadProgress({ style={styles.progress} color={progress.files[key].percent === 1 ? "green" : "blue"} /> + {progress.files[key].speed !== 0 && + progress.files[key].speed && + !isNaN(progress.files[key].speed) ? ( + {`${formatBytes(progress.files[key].speed)}/sec`} + ) : null} ))} diff --git a/util/document-upload.utility.js b/util/document-upload.utility.js index e52c9f0..2f4373a 100644 --- a/util/document-upload.utility.js +++ b/util/document-upload.utility.js @@ -5,6 +5,7 @@ import { INSERT_NEW_DOCUMENT } from "../graphql/documents.queries"; import { axiosAuthInterceptorId } from "./CleanAxios"; import * as MediaLibrary from "expo-media-library"; import { gql } from "@apollo/client"; +import mime from "mime"; //Context: currentUserEmail, bodyshop, jobid, invoiceid @@ -17,9 +18,9 @@ export const handleUpload = async (ev, context) => { const { bodyshop, jobId } = context; const imageData = await MediaLibrary.getAssetInfoAsync(mediaId); - const newFile = await (await fetch(imageData.localUri)).blob(); - let extension = imageData.localUri.split(".").pop(); - let key = `${bodyshop.id}/${jobId}/${(filename || newFile.data.name).replace( + // const newFile = await (await fetch(imageData.localUri)).blob(); + let extension = imageData.filename.split(".").pop(); + let key = `${bodyshop.id}/${jobId}/${filename.replace( /\.[^/.]+$/, "" )}-${new Date().getTime()}`; @@ -29,8 +30,8 @@ export const handleUpload = async (ev, context) => { mediaId, imageData, extension, - newFile.type, - newFile, + mime.getType(imageData.uri), + //newFile, onError, onSuccess, onProgress, @@ -45,7 +46,7 @@ export const uploadToCloudinary = async ( imageData, extension, fileType, - file, + //file, onError, onSuccess, onProgress, @@ -93,7 +94,10 @@ export const uploadToCloudinary = async ( var signature = signedURLResponse.data; var options = { - headers: { "X-Requested-With": "XMLHttpRequest" }, + headers: { + "X-Requested-With": "XMLHttpRequest", + "Content-Type": "multipart/form-data", + }, onUploadProgress: (e) => { if (onProgress) onProgress({ percent: e.loaded / e.total, loaded: e.loaded }); @@ -104,7 +108,7 @@ export const uploadToCloudinary = async ( formData.append("file", { uri: imageData.localUri, type: fileType, - name: file.data.name, + name: imageData.filename, }); formData.append("upload_preset", upload_preset); formData.append("api_key", env.REACT_APP_CLOUDINARY_API_KEY); @@ -178,7 +182,7 @@ export const uploadToCloudinary = async ( type: fileType, extension: extension, bodyshopid: bodyshop.id, - size: cloudinaryUploadResponse.data.bytes || file.size, + size: cloudinaryUploadResponse.data.bytes, //|| file.size, ...(imageData.creationTime ? { takenat: new Date(imageData.creationTime) } : {}), diff --git a/util/local-document-upload.utility.js b/util/local-document-upload.utility.js index 671063f..a380f99 100644 --- a/util/local-document-upload.utility.js +++ b/util/local-document-upload.utility.js @@ -1,8 +1,8 @@ import axios from "axios"; -import { store } from "../redux/store"; -import mime from "mime"; -import * as MediaLibrary from "expo-media-library"; import * as ImageManipulator from "expo-image-manipulator"; +import * as MediaLibrary from "expo-media-library"; +import mime from "mime"; +import { store } from "../redux/store"; axios.interceptors.request.use( function (config) { @@ -40,7 +40,8 @@ export const handleLocalUpload = async ({ ev, context }) => { ims_token: bodyshop.localmediatoken, }, onUploadProgress: (e) => { - if (onProgress) onProgress({ percent: (e.loaded / e.total) * 100 }); + if (onProgress) + onProgress({ percent: (e.loaded / e.total) * 100, loaded: e.loaded }); }, }; @@ -54,39 +55,38 @@ export const handleLocalUpload = async ({ ev, context }) => { const imageData = await MediaLibrary.getAssetInfoAsync(mediaId); const mimeType = mime.getType(imageData.uri); - let thumb; + //let thumb; let fileData = { uri: null, type: null, name: null, }; - if (mimeType === "image/heic") { - try { - thumb = await ImageManipulator.manipulateAsync(imageData.uri, [], { - format: "jpeg", - base64: true, - compress: 0.75, - }); - const name = imageData.filename.split("."); - name.pop(); - fileData = { - uri: thumb.uri, - type: "image/jpeg", - name: name.join("") + ".jpeg", - }; - } catch (error) { - console.log(error); - onError && onError(error.message); - } - } else { - fileData = { - uri: imageData.localUri || imageData.uri, - type: mimeType, - name: filename, - }; - } + // if (mimeType === "image/heic") { + // try { + // thumb = await ImageManipulator.manipulateAsync(imageData.uri, [], { + // format: "jpeg", + // base64: true, + // compress: 0.75, + // }); + // const name = imageData.filename.split("."); + // name.pop(); + // fileData = { + // uri: thumb.uri, + // type: "image/jpeg", + // name: name.join("") + ".jpeg", + // }; + // } catch (error) { + // console.log(error); + // onError && onError(error.message); + // } + // } else { + fileData = { + uri: imageData.localUri || imageData.uri, + type: mimeType, + name: filename, + }; + //} - console.log("Got past reading the media.", formData); formData.append("file", fileData); formData.append("skip_thumbnail", true); @@ -101,14 +101,8 @@ export const handleLocalUpload = async ({ ev, context }) => { } ); - console.log( - "Response Time ", - imexMediaServerResponse.headers["x-response-time"] - ); - if (imexMediaServerResponse.status !== 200) { if (onError) { - console.log(imexMediaServerResponse); onError( imexMediaServerResponse.data || imexMediaServerResponse.statusText ); @@ -118,7 +112,6 @@ export const handleLocalUpload = async ({ ev, context }) => { onSuccess({ duration: imexMediaServerResponse.headers["x-response-time"], }); - console.log("Succesful upload", imageData.filename); } if (callbackAfterUpload) {