-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfileUtils.js
More file actions
5 lines (4 loc) · 13.9 KB
/
Copy pathfileUtils.js
File metadata and controls
5 lines (4 loc) · 13.9 KB
1
2
3
4
5
/* mobilecaddy-utils - v3.2.1 - Bundle Time: 2024-10-22 11:36:49 */
/* git info: "2024-10-22 11:34:11 +0100": 4b69821f8a37db692d32cb588a22dc57e260d69b (v3) */
/* Copyright 2024 MobileCaddy Ltd */
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.downloadFiles=downloadFiles,exports.storeFilesInfo=storeFilesInfo,exports.getStorageDirectory=getStorageDirectory,exports.readAsDataURL=readAsDataURL;var smartstore,mobileCaddy=_interopRequireWildcard(require("./constants")),appDataUtils=_interopRequireWildcard(require("./appDataUtils")),smartStoreUtils=_interopRequireWildcard(require("./smartStoreUtils")),syncRefresh=_interopRequireWildcard(require("./syncRefresh")),logger=_interopRequireWildcard(require("./logger")),_=_interopRequireWildcard(require("underscore"));function _interopRequireWildcard(e){if(e&&e.__esModule)return e;var o={};if(null!=e)for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var r=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,t):{};r.get||r.set?Object.defineProperty(o,t,r):o[t]=e[t]}return o.default=e,o}var storageDirectory,cdvFileURI,logTag="fileUtils.js",RECORD_FILES_TABLE="File_Library__ap",QUERY_PAGE_SIZE=1e4,CONTENT_VSN_FIELD="SF_Content_Version_Id__c",SYNC_FIELD="Synchronised__c",FILE_TYPE_FIELD="File_Type__c",LOCAL_PATH_FIELD="Local_Path",IN_APP_COMPOSER_FIELD="In_App_Composer__c",USE_FORCETK=!!window.USE_FORCETK,LOCAL_DEV=!!window.LOCAL_DEV,NUM_FILES_TO_DOWNLOAD="numFilesToDownload",CURR_FILE_DOWNLOAD_IDX="currFileDownloadIdx",ALL_FILES_DOWNLOADED="allFilesDownloaded",downloadedFileCount=0,totalFilesToDownload=0,DOWNLOAD_FETCH=0,DOWNLOAD_CORDOVA_PLUGIN=1,DOWNLOAD_FORCEJS=2,fieldNamespacePrefix="";function getStorageDirectory(){return storageDirectory=cordova.file?cordova.file.documentsDirectory?cordova.file.documentsDirectory:cordova.file.dataDirectory:"CodeFlow"}function storeFilesInfo(e){return new Promise(function(o,t){storageDirectory||getStorageDirectory();var r=e,n="",i=(r.map(function(e,o){return n+=0===o?"'"+e.Id+"'":",'"+e.Id+"'",e.Id}),"SELECT {"+RECORD_FILES_TABLE+":Id} FROM {"+RECORD_FILES_TABLE+"} WHERE {"+RECORD_FILES_TABLE+":Id} IN ("+n+")"),a=(window.smartstore?window.smartstore:cordova.require("com.salesforce.plugin.smartstore")).buildSmartQuerySpec(i,QUERY_PAGE_SIZE);smartStoreUtils.smartQuerySoupRecordsWithQuerySpec(a).then(function(e){var o;return o=0!==e.length?r.filter(function(o){return!e[0].includes(o.Id)}):r,smartStoreUtils.upsertSoupEntries(RECORD_FILES_TABLE,o)}).then(function(e){o(e)}).catch(function(e){t(e)})})}function readAsDataURL(e){return new Promise(function(o,t){if(cordova.platformId)"ios"==cordova.platformId?window.resolveLocalFileSystemURL(getStorageDirectory(),function(t){cdvFileURI=window.Ionic.WebView?window.Ionic.WebView.convertFileSrc(t.toURL()+"media/"):plugin.Ionic.WebView.convertFileSrc(t.toURL()+"media/"),o(cdvFileURI+e)}):o("./../media/"+e);else if(window.location.origin.includes("localhost"))window.IonicVersion&&6===window.IonicVersion?o("/assets/mock/files/"+e):o("/mock/files/"+e);else{var r=window.cdfyAwsUrl;if(r)o(r+"/"+e);else{var n=e.substring(0,e.indexOf("."));o("/sfc/servlet.shepherd/version/download/"+n)}}})}function downloadFiles(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return new Promise(function(o,t){var r;(downloadedFileCount=0,window.LOCAL_DEV&&!window.USE_FORCETK)?(localStorage.setItem(ALL_FILES_DOWNLOADED,"true"),checkForMediaDigest(),o([{status:200}])):(storageDirectory||getStorageDirectory(),checkForMediaDir().then(function(e){return setRemoteAppNamespace()}).then(function(e){return checkForMediaDigest()}).then(function(o){return getFilesToDownload(e)}).then(function(e){e.length>0?(r=e,localStorage.setItem(NUM_FILES_TO_DOWNLOAD,r.length),totalFilesToDownload=r.length,getConnectionInfo().then(function(e){return Promise.all(r.map(function(o){return doDownloadFile(o,e).then(function(e){return e}).catch(function(e){return e})})).then(function(e){return logger.log("accum",e),e}).catch(function(e){return e})}).then(function(e){logger.log("res1",e),o(e)}).catch(function(e){t("filesToDownload2")})):(logger.log("No files to download"),localStorage.setItem(ALL_FILES_DOWNLOADED,"true"),o([{status:200}]))}).catch(function(e){t(e)}))})}function useSdkReq(){return!(!window[mobileCaddy.CONTAINER_VSN_KEY]||!window[mobileCaddy.CONTAINER_VSN_KEY].startsWith("3"))}function getConnectionInfo(){return new Promise(function(e,o){var t={accessToken:null,instanceUrl:null,downloadUrl:null};appDataUtils.getCurrentValueFromAppSoup("accessToken").then(function(e){return t.accessToken=e||JSON.parse(localStorage.getItem("forceOAuth")).access_token,appDataUtils.getCurrentValueFromAppSoup("instanceUrl")}).then(function(e){return t.instanceUrl=LOCAL_DEV?"":e||JSON.parse(localStorage.getItem("forceOAuth")).instance_url+"/",appDataUtils.getCurrentValueFromAppSoup("communityId")}).then(function(o){o?appDataUtils.getCurrentValueFromAppSoup("communityUrl").then(function(r){t.downloadUrl=r+"/services/data/v39.0/connect/communities/"+o+"/files/",e(t)}):(t.downloadUrl=t.instanceUrl+"/services/data/v39.0/connect/files/",e(t))}).catch(function(e){logger.error("Error creating connectionInfo",e)})})}function checkForMediaDir(){return new Promise(function(e,o){"CodeFlow"!=storageDirectory?window.resolveLocalFileSystemURL(storageDirectory+"",function(o){o.getDirectory("media",{create:!0,exclusive:!1},function(o){e()},function(o){logger.error("Error Creating media directory",o),e()})}):e()})}function checkForMediaDigest(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return new Promise(function(o,t){++e>=120&&(logger.error("TIMEOUT checkForMediaDigest"),o()),LOCAL_DEV&&o(),"undefined"!=typeof plugin&&plugin.mcsdk&&plugin.mcsdk.getMediaInstallerDigest?plugin.mcsdk.getMediaInstallerDigest(function(t){switch(t.result.status){case"pending":setTimeout(function(t){checkForMediaDigest(e).then(function(e){o(e)})},1e3);break;case"notfound":o();break;case"error":logger.error(t.result.message),o();break;case"complete":updateFileLibraryFromDigest(JSON.parse(t.result.message).contains).then(function(e){o()}).catch(function(e){logger.error("ERROR updateFileLibraryFromDigest",err),o()})}},function(e){logger.error("ERROR getMediaInstallerDigest",e),o()}):o()})}function updateFileLibraryFromDigest(e){return new Promise(function(o,t){var r=e.map(function(e){return"'"+e.fid+"'"}),n={};e.forEach(function(e){return n[e.fid]=e.cvid});var i=r.join(","),a="SELECT * FROM {"+RECORD_FILES_TABLE+"} WHERE {"+RECORD_FILES_TABLE+":Id} IN ("+i+")",c=window.smartstore?window.smartstore:cordova.require("com.salesforce.plugin.smartstore"),s=c.buildSmartQuerySpec(a,1);smartStoreUtils.smartQuerySoupRecordsWithQuerySpec(s).then(function(e){return updateLocalRecords(e,n)}).then(function(e){c.upsertSoupEntriesWithExternalId(RECORD_FILES_TABLE,e,"Id",function(e){o()})}).catch(function(e){logger.error("ERROR updateFileLibraryFromDigest",e),t(e)})})}function updateLocalRecords(e,o){return new Promise(function(t){var r=e.reduce(function(e,t){var r=t[1];return r[fieldNamespacePrefix+SYNC_FIELD]=1,r[fieldNamespacePrefix+LOCAL_PATH_FIELD]=storageDirectory+o[r.Id].cvid+".xxx",e.push(r),e},[]);t(r)})}function doDownloadFile(e,o){return logger.log(logTag,"doDownloadFile",e),new Promise(function(t,r){LOCAL_DEV&&!USE_FORCETK?t():getFileInfoFromContentVersionId(e[1],o.accessToken,o.instanceUrl).then(function(n){n&&n.fileId&&n.fileId.length>0?checkMediaFileExists(e[1]+"."+e[2]).then(function(i){if(i)updateFileRec(e),t({status:200});else{var a=o.downloadUrl+n.fileId+"/content";logger.log(logTag,"urlToDownload",a);getDownloadMethod();switch(getDownloadMethod()){case DOWNLOAD_FETCH:var c=new Headers;c.append("Authorization","Bearer "+o.accessToken),c.append("Content-Type",getContentType(n.fileExtension));var s={method:"GET",headers:c,mode:"cors"},l=new Request(a);fetch(l,s).then(function(n){switch(logger.log(logTag,n),n.status){case 200:downloadedFileCount++,localStorage.setItem(CURR_FILE_DOWNLOAD_IDX,downloadedFileCount),downloadedFileCount===totalFilesToDownload&&localStorage.setItem(ALL_FILES_DOWNLOADED,"true"),saveFile(e,n),t(n);break;case 401:syncRefresh.refreshToken(function(t){return o.accessToken=t,doDownloadFile(e,o)},function(e){logger.error(logTag,"Failed to refresh token",e),r(e)});break;default:logger.error("resp.status",n.status),logger.error("resp.statusText",n.statusText),logger.error("resp.type",n.type),t(n)}}).catch(function(e){logger.error("Something went wrong!",e),r(e)});break;case DOWNLOAD_CORDOVA_PLUGIN:window.resolveLocalFileSystemURL(storageDirectory,function(r){var n=storageDirectory+"media/"+e[1]+"."+e[2];cordova.plugin.http.downloadFile(a,{},{Authorization:"Bearer "+o.accessToken},n,function(o){downloadedFileCount++,localStorage.setItem(CURR_FILE_DOWNLOAD_IDX,downloadedFileCount),downloadedFileCount===totalFilesToDownload&&localStorage.setItem(ALL_FILES_DOWNLOADED,"true"),updateFileRec(e),t({status:200})},function(e){t(e)})});break;case DOWNLOAD_FORCEJS:var u={contentType:getContentType(n.fileExtension),method:"GET",path:a,fileExtension:n.fileExtension};force.request(u,function(o){saveFile(e,o),t(o)},function(e){logger.error(logTag,"doDownloadFile",e),r(e)})}}}).catch(function(e){logger.error("ERROR checkFileExists",e),t()}):t()}).catch(function(e){logger.error(e),r(e)})})}function getContentType(e){switch(e){case"jpg":return"image/jpeg";case"png":return"image/png";case"svg":return"image/svg+xml";case"m4v":case"mp4":return"video/mpeg"}}function getDownloadMethod(){return LOCAL_DEV?DOWNLOAD_FORCEJS:useSdkReq()&&"ios"==cordova.platformId?DOWNLOAD_CORDOVA_PLUGIN:DOWNLOAD_FETCH}function getFileInfoFromContentVersionId(e,o,t){var r="/services/data/v39.0/sobjects/ContentVersion/"+e,n=t+r;return new Promise(function(t,i){if(e&&e.length>0){logger.log(logTag,"urlToDownload",n);var a=new Headers;a.append("Authorization","Bearer "+o),a.append("Content-Type","application/json");var c={method:"GET",headers:a,mode:"cors"},s=new Request(n);if(useSdkReq())plugin.mcsdk.request({method:"GET",path:r,contentType:"application/json",data:{}},function(e){t({fileId:e.ContentDocumentId,fileExtension:e.FileExtension})},function(e){i(e)});else if(LOCAL_DEV){var l={contentType:"application/json",method:"GET",path:n};force.request(l,function(e){t({fileId:e.ContentDocumentId,fileExtension:e.FileExtension})},function(e){logger.error(logTag,"getFileIdFromContentVersionId",e),i(e)})}else fetch(s,c).then(function(e){return logger.log(logTag,e),200==e.status?e.json():(logger.error("resp.status",e.status),logger.error("resp.statusText",e.statusText),logger.error("resp.type",e.type),Promise.reject("Failed to read ContentVersionId object"))}).then(function(e){t({fileId:e.ContentDocumentId,fileExtension:e.FileExtension})}).catch(function(e){logger.error(logTag,"Something went wrong!",e),i(e)})}else t(null)})}function checkMediaFileExists(e){return new Promise(function(o,t){if("CodeFlow"!=storageDirectory){var r=storageDirectory+"media/"+e;window.resolveLocalFileSystemURL(r,function(e){o(!0)},function(e){e.code&&1===e.code||logger.error("Error checkMediaFileExists resolveLocalFileSystemURL",e),o(!1)})}else o(!1)})}function getFilesToDownload(e){return new Promise(function(o,t){(window.smartstore?window.smartstore:cordova.require("com.salesforce.plugin.smartstore")).soupExists(RECORD_FILES_TABLE,function(r){if(r){var n="SELECT {"+RECORD_FILES_TABLE+":Id},{"+RECORD_FILES_TABLE+":"+fieldNamespacePrefix+CONTENT_VSN_FIELD+"},{"+RECORD_FILES_TABLE+":"+fieldNamespacePrefix+FILE_TYPE_FIELD+"},{"+RECORD_FILES_TABLE+":"+fieldNamespacePrefix+IN_APP_COMPOSER_FIELD+"} FROM {"+RECORD_FILES_TABLE+"} WHERE {"+RECORD_FILES_TABLE+":"+fieldNamespacePrefix+SYNC_FIELD+"} = 0"+(e?" AND {"+RECORD_FILES_TABLE+":"+fieldNamespacePrefix+IN_APP_COMPOSER_FIELD+"} = '"+e+"'":""),i=(window.smartstore?window.smartstore:cordova.require("com.salesforce.plugin.smartstore")).buildSmartQuerySpec(n,QUERY_PAGE_SIZE);smartStoreUtils.smartQuerySoupRecordsWithQuerySpec(i).then(function(e){if(logger.log("Query res",e),e&&e[0]){var t=[],r=[];e.forEach(function(e){"Published"===e[3]?t.push(e):r.push(e)}),o(t.concat(r))}else o([])}).catch(function(e){t(e)})}else o([])},function(e){logger.error("Failed to check soupExists for "+RECORD_FILES_TABLE),t(e)})})}function saveFile(e,o){if("CodeFlow"!=storageDirectory)window.resolveLocalFileSystemURL(storageDirectory+"media",function(t){t.getFile(e[1]+"."+e[2],{create:!0,exclusive:!1},function(t){writeFile(t,o).then(function(o){updateFileRec(e)})})},function(e){});else{if(USE_FORCETK){var t=btoa(new Uint8Array(o).reduce(function(e,o){return e+String.fromCharCode(o)},""));saveFileToMock(e[1]+"."+e[2],t)}updateFileRec(e)}}function writeFile(e,o){return new Promise(function(t,r){e.createWriter(function(e){e.onwriteend=function(){t()},e.onerror=function(e){logger.error("Failed file write: "+e.toString()),r()},o.data?e.write(o.data):o.arrayBuffer().then(function(o){e.write(o)})})})}function updateFileRec(e){var o="SELECT * FROM {"+RECORD_FILES_TABLE+"} WHERE {"+RECORD_FILES_TABLE+":Id} = '"+e[0]+"'";logger.log("soql",o);var t=window.smartstore?window.smartstore:cordova.require("com.salesforce.plugin.smartstore"),r=t.buildSmartQuerySpec(o,1);smartStoreUtils.smartQuerySoupRecordsWithQuerySpec(r).then(function(o){var r=o[0][1];logger.log("myRec",r),r[fieldNamespacePrefix+SYNC_FIELD]=1,r[fieldNamespacePrefix+LOCAL_PATH_FIELD]=storageDirectory+e[1]+"."+e[2],t.upsertSoupEntriesWithExternalId(RECORD_FILES_TABLE,[r],"Id",function(e){})}).catch(function(e){})}function setRemoteAppNamespace(){return new Promise(function(e,o){LOCAL_DEV?window.REMOTE_NAMESPACE?(fieldNamespacePrefix=window.REMOTE_NAMESPACE+"__",e({result:window.REMOTE_NAMESPACE})):e(null):"undefined"!=typeof plugin&&plugin.mcsdk||LOCAL_DEV?plugin.mcsdk.getAppConfigNamespace(function(o){fieldNamespacePrefix=o.result?o.result+"__":"",e(o)}):e(null)})}function saveFileToMock(e,o){var t={filename:e,base64:o};fetch("http://localhost:3000/codeflow/storefile",{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8"},body:JSON.stringify(t)}).then(function(e){}).catch(function(e){})}