diff --git a/components/screen-media-browser/screen-media-browser.component.jsx b/components/screen-media-browser/screen-media-browser.component.jsx index 83e9e45..3d8fabc 100644 --- a/components/screen-media-browser/screen-media-browser.component.jsx +++ b/components/screen-media-browser/screen-media-browser.component.jsx @@ -83,7 +83,7 @@ export function ImageBrowserScreen({ const widgetSettings = useMemo( () => ({ getImageMetaData: false, // true might perform slower results but gives meta data and absolute path for ios users - initialLoad: 100, + initialLoad: 50, assetsType: [MediaType.photo, MediaType.video], minSelection: 1, // maxSelection: 3, diff --git a/components/screen-settings/screen-settings.component.jsx b/components/screen-settings/screen-settings.component.jsx index 6ce2b15..d563de7 100644 --- a/components/screen-settings/screen-settings.component.jsx +++ b/components/screen-settings/screen-settings.component.jsx @@ -6,6 +6,7 @@ import { Title, Button } from "react-native-paper"; import { purgeStoredState } from "redux-persist"; import SignOutButton from "../sign-out-button/sign-out-button.component"; import * as Updates from "expo-updates"; +import * as Application from "expo-application"; export default function ScreenSettingsComponent() { const { t } = useTranslation(); @@ -21,7 +22,7 @@ export default function ScreenSettingsComponent() { > {t("settings.labels.version", { - number: `${Constants.expoConfig.version}-${Constants.expoConfig.extra.expover}`, + number: `${Constants.expoConfig.version}(${Application.nativeBuildVersion})`, })} diff --git a/util/document-upload.utility.js b/util/document-upload.utility.js index a623c5a..e95fbec 100644 --- a/util/document-upload.utility.js +++ b/util/document-upload.utility.js @@ -20,6 +20,7 @@ export const handleUpload = async (ev, context) => { try { const imageData = await MediaLibrary.getAssetInfoAsync(mediaId); + const newFile = await ( await fetch(imageData.localUri || imageData.uri) ).blob(); @@ -149,30 +150,33 @@ export const uploadToImgproxy = async ( }, }; - const formData = new FormData(); - formData.append("file", { - uri: imageData.localUri, - type: fileType, - name: file.data.name, - }); try { - const s3UploadResponse = await cleanAxios.put( - preSignedUploadUrlToS3, - file, - options - ); + await new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open("PUT", preSignedUploadUrlToS3); + xhr.setRequestHeader("Content-Type", fileType); - if (s3UploadResponse.status !== 200) { - console.log( - "Error uploading to cloudinary.", - s3UploadResponse.statusText, - s3UploadResponse - ); - if (onError) onError(s3UploadResponse.statusText); - return { success: false, error: s3UploadResponse.statusText }; - } - //debugger; + xhr.upload.onprogress = (event) => { + if (onProgress && event.lengthComputable) { + onProgress({ percent: event.loaded / event.total, loaded: event.loaded }); + } + }; + + xhr.onload = () => { + if (xhr.status === 200) { + resolve(); + } else { + reject(new Error(`Upload failed: ${xhr.statusText}`)); + } + }; + + xhr.onerror = () => { + reject(new Error("Network error")); + }; + + xhr.send(file); + }); } catch (error) { console.log("Error uploading to S3", error.message, error.stack); if (onError) onError(error.message); @@ -372,12 +376,16 @@ export function DetermineFileType(filetype) { } export function formatBytes(a, b = 2) { - if (0 === a || !a) return "0 Bytes"; + if (0 === a || !a || isNaN(a)) return "0 Bytes"; const c = 0 > b ? 0 : b, d = Math.floor(Math.log(a) / Math.log(1024)); + const parsedFloat = parseFloat((a / Math.pow(1024, d)).toFixed(c)) + if (isNaN(parsedFloat)) { + return "0 Bytes"; + } return ( - parseFloat((a / Math.pow(1024, d)).toFixed(c)) + + parsedFloat + " " + ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"][d] );