"use strict"; var __async = (__this, __arguments, generator) => { return new Promise((resolve, reject) => { var fulfilled = (value) => { try { step(generator.next(value)); } catch (e) { reject(e); } }; var rejected = (value) => { try { step(generator.throw(value)); } catch (e) { reject(e); } }; var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); step((generator = generator.apply(__this, __arguments)).next()); }); }; const common_vendor = require("../../../../../common/vendor.js"); const modules_mall_sheep_api_infra_file = require("../../api/infra/file.js"); const ERR_MSG_OK = "chooseAndUploadFile:ok"; const ERR_MSG_FAIL = "chooseAndUploadFile:fail"; function chooseImage(opts) { const { count, sizeType = ["original", "compressed"], sourceType = ["album", "camera"], extension } = opts; return new Promise((resolve, reject) => { common_vendor.index.chooseImage({ count, sizeType, sourceType, extension, success(res) { resolve(normalizeChooseAndUploadFileRes(res, "image")); }, fail(res) { reject({ errMsg: res.errMsg.replace("chooseImage:fail", ERR_MSG_FAIL) }); } }); }); } function chooseVideo(opts) { const { camera, compressed, maxDuration, sourceType = ["album", "camera"], extension } = opts; return new Promise((resolve, reject) => { common_vendor.index.chooseVideo({ camera, compressed, maxDuration, sourceType, extension, success(res) { const { tempFilePath, duration, size, height, width } = res; resolve( normalizeChooseAndUploadFileRes( { errMsg: "chooseVideo:ok", tempFilePaths: [tempFilePath], tempFiles: [ { name: res.tempFile && res.tempFile.name || "", path: tempFilePath, size, type: res.tempFile && res.tempFile.type || "", width, height, duration, fileType: "video", cloudPath: "" } ] }, "video" ) ); }, fail(res) { reject({ errMsg: res.errMsg.replace("chooseVideo:fail", ERR_MSG_FAIL) }); } }); }); } function chooseAll(opts) { const { count, extension } = opts; return new Promise((resolve, reject) => { let chooseFile = common_vendor.index.chooseFile; if (typeof common_vendor.wx$1 !== "undefined" && typeof common_vendor.wx$1.chooseMessageFile === "function") { chooseFile = common_vendor.wx$1.chooseMessageFile; } if (typeof chooseFile !== "function") { return reject({ errMsg: ERR_MSG_FAIL + " 请指定 type 类型,该平台仅支持选择 image 或 video。" }); } chooseFile({ type: "all", count, extension, success(res) { resolve(normalizeChooseAndUploadFileRes(res)); }, fail(res) { reject({ errMsg: res.errMsg.replace("chooseFile:fail", ERR_MSG_FAIL) }); } }); }); } function normalizeChooseAndUploadFileRes(res, fileType) { res.tempFiles.forEach((item, index) => { if (!item.name) { item.name = item.path.substring(item.path.lastIndexOf("/") + 1); } if (fileType) { item.fileType = fileType; } item.cloudPath = Date.now() + "_" + index + item.name.substring(item.name.lastIndexOf(".")); }); if (!res.tempFilePaths) { res.tempFilePaths = res.tempFiles.map((file) => file.path); } return res; } function uploadCloudFiles(files, max = 5, onUploadProgress) { files = JSON.parse(JSON.stringify(files)); const len = files.length; let count = 0; const self = this; return new Promise((resolve) => { while (count < max) { next(); } function next() { const cur = count++; if (cur >= len) { !files.find((item) => !item.url && !item.errMsg) && resolve(files); return; } const fileItem = files[cur]; const index = self.files.findIndex((v) => v.uuid === fileItem.uuid); fileItem.url = ""; delete fileItem.errMsg; common_vendor.Ws.uploadFile({ filePath: fileItem.path, cloudPath: fileItem.cloudPath, fileType: fileItem.fileType, onUploadProgress: (res) => { res.index = index; onUploadProgress && onUploadProgress(res); } }).then((res) => { fileItem.url = res.fileID; fileItem.index = index; if (cur < len) { next(); } }).catch((res) => { fileItem.errMsg = res.errMsg || res.message; fileItem.index = index; if (cur < len) { next(); } }); } }); } function uploadFiles(choosePromise, { onChooseFile, onUploadProgress }) { return choosePromise.then((res) => { if (onChooseFile) { const customChooseRes = onChooseFile(res); if (typeof customChooseRes !== "undefined") { return Promise.resolve(customChooseRes).then( (chooseRes) => typeof chooseRes === "undefined" ? res : chooseRes ); } } return res; }).then((res) => { if (res === false) { return { errMsg: ERR_MSG_OK, tempFilePaths: [], tempFiles: [] }; } return res; }).then((files) => __async(this, null, function* () { for (const file of files.tempFiles) { const { data } = yield modules_mall_sheep_api_infra_file.FileApi.uploadFile(file.path); file.url = data; } return files; })); } function chooseAndUploadFile(opts = { type: "all" }) { if (opts.type === "image") { return uploadFiles(chooseImage(opts), opts); } else if (opts.type === "video") { return uploadFiles(chooseVideo(opts), opts); } return uploadFiles(chooseAll(opts), opts); } exports.chooseAndUploadFile = chooseAndUploadFile; exports.uploadCloudFiles = uploadCloudFiles;