Files
yaoayanui/src/config/videoPipeline.js
fengchuanhn@gmail.com 27e83c564c 11
2026-05-18 08:52:38 +08:00

97 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 流水线配置校验Rust 合并服务端 desktop_configs + 本地 SQLite同名本地优先
* 实际密钥由 Node 子进程通过环境变量 AICLIENT_CFG_* 读取,无需在前端 params 传递。
*/
import { invoke } from "@tauri-apps/api/core";
/** @returns {Promise<{ ok: true, map: Record<string, string> } | { ok: false, message: string }>} */
export async function loadAppConfigMap() {
try {
const map = await invoke("get_app_config");
if (map && typeof map === "object" && Object.keys(map).length > 0) {
return { ok: true, map };
}
const serverMsg = await invoke("get_app_config_last_message");
if (serverMsg) {
return { ok: false, message: String(serverMsg) };
}
return {
ok: false,
message: "未获取到应用配置,请登录服务端或在「本地配置」中添加密钥",
};
} catch {
return {
ok: false,
message: "请在 Tauri 桌面端使用,并登录或在「本地配置」中设置密钥",
};
}
}
/** 一键仿写 / 在线 ASR 等需百炼密钥 */
export async function ensureAppConfigReady() {
const loaded = await loadAppConfigMap();
if (!loaded.ok) return loaded;
const apiKey = loaded.map.BAILIAN_API_KEY || loaded.map.DASHSCOPE_API_KEY;
if (!apiKey) {
return {
ok: false,
message:
"缺少 BAILIAN_API_KEY或 DASHSCOPE_API_KEY请在配置管理或「本地配置」中设置",
};
}
return { ok: true };
}
/** 撰写文案 / LLM 改写需文本模型配置 */
export async function ensureLlmConfigReady() {
const loaded = await loadAppConfigMap();
if (!loaded.ok) return loaded;
const { map } = loaded;
const apiKey = map.LLM_API_KEY || map.API_KEY;
const apiUrl = map.LLM_BASE_URL || map.LLM_API_URL;
if (!apiKey) {
return {
ok: false,
message: "缺少 LLM_API_KEY请在配置管理或「本地配置」中设置文本模型",
};
}
if (!apiUrl) {
return {
ok: false,
message: "缺少 LLM_BASE_URL或 LLM_API_URL请配置文本模型接口地址",
};
}
return { ok: true };
}
const DOUYIN_RE = /douyin\.com|iesdouyin\.com|v\.douyin\.com/i;
const DIRECT_VIDEO_RE = /\.(mp4|mov|m4v|webm|mkv|flv|avi)(\?|$)/i;
/** @returns {{ ok: true, value: string } | { ok: false, message: string }} */
export function validateShareText(text) {
const raw = String(text || "").trim();
if (!raw) {
return { ok: false, message: "请粘贴视频分享文本或视频链接" };
}
const urls = raw.match(/https?:\/\/[^\s\u4e00-\u9fa5]+/gi) || [];
if (urls.some((u) => DIRECT_VIDEO_RE.test(u))) {
return { ok: true, value: raw };
}
if (DOUYIN_RE.test(raw) || urls.some((u) => DOUYIN_RE.test(u))) {
return { ok: true, value: raw };
}
return {
ok: false,
message:
"请输入抖音分享文本、抖音视频链接或直接视频文件链接mp4/mov/webm/mkv/avi",
};
}
export const DEFAULT_REWRITE_CONFIG = {
style: "casual",
length: "medium",
keepHashtags: true,
keepEmoji: true,
};