"use strict"; const common_vendor = require("../common/vendor.js"); const checkAlbumPermission = () => { return new Promise((resolve, reject) => { common_vendor.index.getSetting({ success(res) { if (res.authSetting["scope.writePhotosAlbum"] === void 0) { requestAlbumPermission().then(resolve).catch(reject); } else if (res.authSetting["scope.writePhotosAlbum"] === false) { resolve(false); } else { resolve(true); } }, fail: reject }); }); }; const requestAlbumPermission = () => { return new Promise((resolve, reject) => { common_vendor.index.authorize({ scope: "scope.writePhotosAlbum", success: () => resolve(true), fail: () => resolve(false) }); }); }; const openSettings = () => { return new Promise((resolve) => { common_vendor.index.showModal({ title: "提示", content: "需要您授权访问相册才能保存视频,是否前往设置?", success(res) { if (res.confirm) { common_vendor.index.openSetting({ success: () => resolve(true), fail: () => resolve(false) }); } else { resolve(false); } } }); }); }; const saveVideoToAlbum = (filePath) => { return new Promise(async (resolve, reject) => { try { const hasPermission = await checkAlbumPermission(); if (!hasPermission) { const settingsResult = await openSettings(); if (!settingsResult) { return reject(new Error("相册权限被拒绝")); } const newPermission = await checkAlbumPermission(); if (!newPermission) { return reject(new Error("相册权限被拒绝")); } } common_vendor.index.saveVideoToPhotosAlbum({ filePath, success: resolve, fail: reject }); } catch (error) { reject(error); } }); }; const downloadAndSaveVideo = async (url) => { try { common_vendor.index.showLoading({ title: "下载中...", mask: true }); const downloadRes = await common_vendor.index.$http.download(url); await saveVideoToAlbum(downloadRes.tempFilePath); common_vendor.index.showToast({ title: "已成功保存到相册" }); return true; } catch (error) { console.error("下载保存失败:", error); common_vendor.index.showToast({ title: `保存失败: ${error.message || "未知错误"}`, icon: "none" }); return false; } finally { common_vendor.index.hideLoading(); } }; exports.downloadAndSaveVideo = downloadAndSaveVideo;