pan-mini/unpackage/dist/dev/mp-weixin/utils/media.js

89 lines
2.6 KiB
JavaScript

"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;