PageSourceSearch

https://bibigpt.co/_next/static/chunks/3hzw5jntjh0ie.js

js bibigpt.co collected 2026-09-24 09:29:01 UTC 42,110 bytes, 9 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,892471,e=>{"use strict";var t=e.i(325735);let r=function(e){return e&&e.length?(0,t.default)(e):[]};var a=e.i(203828),i=e.i(679935),o=e.i(193905),n=e.i(112349),s=e.i(674408),l=e.i(184092),u=e.i(526454),c=e.i(500276),d=e.i(180523),m=e.i(970728),p=e.i(748629),f=e.i(984295),g=e.i(506918),h=e.i(496323),b=e.i(228768),y=e.i(915729),T=e.i(491416),S=e.i(699573),w=e.i(7272);e.s(["useSubmitUrls",0,function(){let{t:e}=(0,o.useTranslation)(),{analytics:t}=(0,n.useAnalytics)(),I=(0,a.useRouter)(),v=g.useStoreAuto.use.setCurrentVideoUrl(),{cleanLocalFile:k,handleNewUrl:C}=(0,u.useUrls)(),{checkUser:E}=(0,l.useCheckUserAndLogin)(),P=(0,p.useAppStore)(e=>e.setShowCreateCollectionDialog),_=(0,p.useAppStore)(e=>e.setShowAddNewContentModal);return{submitUrls:async(a,o={})=>{let{useQueue:n=!0,clearInput:l=!0,skipAnalytics:u=!1}=o;if(!E())return!1;let p=a.trim();if(!p)return!1;let g=p.includes("\n")||p.includes(",")||p.includes(",");if(console.log("submitUrls",{hasMultipleUrls:g,value:p}),g){let a=p.split(/[\n,,]/).map(e=>e.trim()).filter(Boolean),o=a.map(e=>(0,S.parseUrlFromText)(e)).filter(e=>e.startsWith("http")),c=o.length-r(o).length,d=r(o),m=a.length-o.length;if(d.length>s.MAX_BATCH_SUMMARIZE_VIDEOS)return i.toast.error(e("最多同时支持 {{max}} 个链接哦!",{max:s.MAX_BATCH_SUMMARIZE_VIDEOS}),{description:e("抱歉,服务器负载暂时有限,请分批次进行总结啦~")}),!1;if(0===d.length)return i.toast.error(e("未检测到有效的URL链接")),!1;let g=0,h=m+Math.max(0,c);for(let t of d)try{if((0,f.requestCnOverseasHandoff)(t)){h++;continue}if((0,b.isBilibiliBangumiUrl)(t)){i.toast.error(e("跳过B站番剧链接: {{url}}",{url:t}),{description:e("番剧属于版权内容,暂时无法解析"),duration:4e3}),h++;continue}await C(t,{useQueue:n}),g++}catch(r){console.error(`处理URL失败: ${t}`,r),(0,w.getShortLinkErrorCode)(r)||i.toast.error(e("处理失败")+`: ${t}`),h++}if(g>0){let t=[];c>0&&t.push(e("重复 {{count}}",{count:c})),m>0&&t.push(e("无效 {{count}}",{count:m}));let r=h-m-Math.max(0,c);r>0&&t.push(e("失败 {{count}}",{count:r})),i.toast.success(e("成功添加 {{count}} 个视频到处理队列",{count:g}),{description:h>0?e("识别 {{total}} 条,跳过 {{skipped}} 条({{reasons}})",{total:a.length,skipped:h,reasons:t.join(e("、"))}):e("视频正在后台处理中"),action:{label:e("加入合集"),onClick:()=>{P(!0,{selectedUrls:d,source:"other"})}}}),l&&v("")}return u||t.track("ContentFormInput BatchSubmit",{success:!0,totalUrls:d.length,rawLines:a.length,successCount:g,skipCount:h,duplicateCount:c,invalidCount:m}),g>0&&{success:!0,totalUrls:d.length,successCount:g,skipCount:h}}{let e=(0,S.parseUrlFromText)(p)||"";if(!e)return i.toast.error("请输入有效的URL链接"),!1;if((0,b.isBilibiliBangumiUrl)(e))return i.toast.error("暂不支持B站番剧链接",{description:"番剧属于版权内容,暂时无法解析。请尝试使用普通的B站视频链接(bilibili.com/video/)",duration:8e3}),!1;if("bilibili-watchlater"===(0,m.classifyUrl)(e)&&!(0,h.isTauri)())return i.toast.info("「稍后再看」是你的私人清单",{description:"网页端读不了它,用桌面端 App 打开稍后再看就能批量总结啦",duration:8e3,action:{label:"下载桌面端",onClick:()=>window.open("/apps/desktop","_blank")}}),!1;if((0,f.requestCnOverseasHandoff)(e))return!1;if((0,T.isChannelUrl)(e))return _(!1),await I.push((0,y.getChannelUrl)(e,(0,m.isPlaylistListUrl)(e)?{intent:"summarize"}:void 0)),{success:!0,totalUrls:1,successCount:1,skipCount:0};try{await C(e,{useQueue:n})}catch(e){throw(0,c.trackEvent)(d.ProductEvents.SUMMARIZE_FAILED,{error_class:e instanceof Error?e.name:"failed"}),e}return l&&v(""),k(),u||t.track("ContentFormInput SingleSubmit",{success:!0,url:e}),{success:!0,totalUrls:1,successCount:1,skipCount:0}}}}}],892471)},177946,e=>{"use strict";var t=e.i(370947),r=e.i(679935),a=e.i(959170),i=e.i(196118),o=e.i(713457),n=e.i(706994),s=e.i(496323),l=e.i(654967),u=e.i(965066),c=e.i(450293);let d=()=>({md:"",txt:""});function m(e){return e.toString().padStart(2,"0")}let p=Promise.resolve();async function f(e){let a=(0,o.sanitizeObsidianFilename)(e.title),i=await (0,t.invoke)("write_obsidian_note",{vaultPath:e.vaultPath,folder:e.folder,filename:a,content:(0,o.buildObsidianNoteContent)(e.note),writeMode:"overwrite"});"written"===i.status&&r.toast.success(`已自动保存到 Obsidian:${i.path}`,{action:{label:"打开",onClick:()=>(0,l.openFileLocation)(i.path)}})}async function g(e){var a,i;let n,s,u,c,d=(a=e.filenameTemplate,i={title:e.title,videoId:e.noteId},n=new Date,s=`${n.getFullYear()}-${m(n.getMonth()+1)}-${m(n.getDate())}`,u=`${s} ${m(n.getHours())}-${m(n.getMinutes())}`,c={title:i.title,videoId:i.videoId,date:s,datetime:u},a.replace(/\{(title|videoId|date|datetime)\}/g,(e,t)=>c[t]??"")),p=(0,o.sanitizeObsidianFilename)(d),f=await (0,t.invoke)("write_local_note",{folderPath:e.folderPath,subfolder:"",filename:p,content:e.note,srtContent:e.srt.trim()?e.srt:null,writeMode:"overwrite"});"written"===f.status&&r.toast.success(`已自动保存到本地文件夹:${f.md_path}`,{action:{label:"打开",onClick:()=>(0,l.openFileLocation)(f.md_path)}})}e.s(["runAutoSyncExportOnTaskComplete",0,function(e){if(!(0,s.isTauri)())return;let t=e.integrations;if(!t)return;let o=!!t.obsidian_auto_sync&&!!t.obsidian_vault_path?.trim(),l=!!t.local_folder_auto_sync&&!!t.local_folder_path?.trim();if(o||l){var m;if(!e.summary?.trim()&&!e.videoDetail.summary?.trim())return void console.warn("[runAutoSyncExport] skip: empty summary");m=async()=>{try{let r=(0,i.getAutoSyncExportConfig)(),s=function(e){let{videoDetail:t,summary:r,chapterSummary:a}=e,i=(0,u.formatSummaryText)({title:t.title,cover:t.cover,url:t.url,dbId:t.dbId},{summary:r||t.summary||"",chapterSummary:a||void 0}),o=i.summaryHeadingMarkdown?`${i.summaryHeadingMarkdown}
2
3${i.formattedSummary}`:i.formattedSummary,n=i.summaryHeadingText?`${i.summaryHeadingText}
4
5${i.formattedSummaryText}`:i.formattedSummaryText,s=(t.descriptionText||"").trim(),l=t.subtitlesArray||[],m=(0,c.mapSubtitleString)(l,"TXT_NO_TIMESTAMPS"),p=(0,c.mapSubtitleString)(l,"SRT");return{videoDescription:{md:s?`## 简介
6
7${s}`:"",txt:s?`简介
8
9${s}`:""},fullSummary:{md:o,txt:n},chapterSummary:{md:i.chapterSummaryMarkdown||"",txt:i.chapterSummaryText||""},customSummaries:d(),reasoning:d(),fullSubtitles:{md:m,txt:m,srt:p,vtt:(0,c.mapSubtitleString)(l,"WebVTT")},aiArticle:d(),polishedArticle:d(),rawArticle:d(),mindmapData:d(),highlightNotes:d(),aiHighlightNotes:d(),plainNote:d(),chatMessages:d(),videoDetail:t}}({videoDetail:e.videoDetail,summary:e.summary,chapterSummary:e.chapterSummary}),m=(0,a.getAggregatedContent)(r.parts,s,"md",n.PARTS_TO_CONSIDER,r.options);if(!m.trim())return void console.warn("[runAutoSyncExport] skip: aggregated note empty");let p=e.videoDetail.title||"Untitled",h=e.videoDetail.dbId||e.videoDetail.id||e.videoDetail.url,b=t.local_folder_include_srt&&s.fullSubtitles.srt?.trim()?s.fullSubtitles.srt:"";o&&await f({title:p,note:m,vaultPath:t.obsidian_vault_path.trim(),folder:t.obsidian_folder||"BibiGPT/"}),l&&await g({title:p,noteId:h,note:m,srt:b,folderPath:t.local_folder_path.trim(),filenameTemplate:t.local_folder_filename_template?.trim()||"{title}"})}catch(t){console.error("[runAutoSyncExport] failed",t);let e=t instanceof Error?t.message:String(t);r.toast.error(`自动导出笔记失败:${e}`)}},p=p.then(m).catch(e=>
9{console.error("[runAutoSyncExport] write queue error",e)})}}])},96540,869401,e=>{"use strict";var t=e.i(191788),r=e.i(145029);function a(e){return Math.max(1,Math.round(e/60))}function i(e,t){if(!t||t<=0||!e||e<=0)return{action:"ok"};let a=e/t;return a>=r.SUBTITLE_COVERAGE_THRESHOLD?{action:"ok"}:e>=60?{action:"warn-preview",previewSeconds:e,totalSeconds:t,coverage:a}:{action:"fail-too-short",previewSeconds:e,totalSeconds:t,coverage:a}}e.s(["decideTruncatedAudioAction",0,i,"minutesFromSeconds",0,a],869401);var o=e.i(895294),n=e.i(490914),s=e.i(496323);function l(e){let t=(0,o.findHandler)(e);return t?.localExtraction?{name:t.name,displayName:t.displayName,isMatch:t.canHandle,preferredLanguages:t.localExtraction.preferredLanguages,authErrorKeywords:t.localExtraction.authErrorKeywords,canFallbackToServer:t.canFallbackToServer,showDesktopHint:t.showDesktopHint}:null}function u(e){let t;return!!(0,s.isTauri)()&&(t=(0,o.findHandler)(e),!!t?.localExtraction&&!t.localExtraction.requiresUserCookies)}function c(e,t){return/fresh cookies|cookies? (expired|are needed|are missing)|pass cookies/i.test(e)||t.filter(e=>"cookie"!==e).some(t=>e.includes(t))}e.s(["canExtractLocally",0,u,"getPlatformConfig",0,l,"getPlatformErrorMessage",0,function(e,t){let r=l(e);return r?r.canFallbackToServer?t:(0,s.isTauri)()?`${r.displayName} 内容处理失败,请在设置中授权账号或使用第三方工具下载后上传`:`${r.displayName} 暂不支持在线解析,请使用桌面端处理或第三方工具下载后上传`:t},"needsDesktopForExtraction",0,function(e){let t=(0,o.findHandler)(e);return t?.showDesktopHint??!1},"useLocalSubtitleExtractor",0,function(o){let{user:d,uploadFileToOSS:m,updateTaskProgress:p,setTaskError:f,setTaskWarning:g,abortIfInactive:h,processAfterSubtitles:b}=o,y=(0,t.useRef)(new Map),T=(0,t.useCallback)(e=>{y.current.delete(e)},[]);return{processSubtitlesLocally:(0,t.useCallback)(async(t,o)=>{let u=l(t.url);if(!(0,s.isTauri)()||!u)return{success:!1,handled:!1};let y=`[${u.displayName} Local]`;console.log(`${y} 🎬 开始本地字幕提取:`,t.url),p(t.id,45,"subtitles","下载字幕");try{let{invoke:s}=await e.A(639641),l=!!t.audioConfig?.transcribeProvider,S=null;if(l)console.log(`${y} ⏭️ 跳过 Step 1 字幕下载,用户选了 ASR engine:`,t.audioConfig?.transcribeProvider),p(t.id,48,"subtitles",`准备用 ${t.audioConfig?.transcribeProvider} 重新转录`);else if(console.log(`${y} Step 1: 下载字幕...`),S=await s("ytdlp_download_subtitles",{url:t.url,language:u.preferredLanguages}),h(t.id))return{success:!1,handled:!0,platform:u.name};if(S?.success&&S.subtitles&&S.subtitles.length>0){let e=S.subtitles[S.subtitles.length-1],a=(e?.start||0)+(e?.duration||0),i=(0,r.detectSubtitleIncomplete)(a,Number(o.duration||0));if(i.incomplete)console.warn(`${y} ⚠️ 字幕不完整(${i.reason}),回退到音频转录`,{count:S.subtitles.length,coverage:i.coverage.toFixed(2),gap:i.gap.toFixed(0),reason:i.reason,isRetry:!0===t.isRetry,duration:o.duration,language:S.language}),p(t.id,50,"subtitles","字幕不完整,转音频转录");else{console.log(`${y} ✅ 字幕下载成功:`,S.subtitles.length,"条",{coverage:i.coverage.toFixed(2)}),p(t.id,80,"subtitles","字幕下载成功");let e=S.subtitles.map((e,t)=>({text:e.text,startTime:e.start,end:e.start+e.duration,index:t}));if(o.dbId)try{await n.apiClient.contentPipeline.pushSubtitles.mutate({contentId:o.dbId,subtitles:e}),console.log(`${y} 字幕已上传到服务端 (pipeline)`)}catch(t){console.warn(`${y} pipeline 推送失败,回退旧接口:`,t);try{await n.apiClient.content.uploadLocalSubtitles.mutate({contentId:o.dbId,subtitlesArray:e,language:S.language}),console.log(`${y} 字幕已上传到服务端 (legacy fallback)`)}catch(e){console.error(`${y} 字幕上传失败:`,e)}}let r={...o,subtitlesArray:e};return p(t.id,85,"summary"),await b(t,r),{success:!0,handled:!0,subtitles:e,platform:u.name}}}let w=S?.error||"",I=c(w,u.authErrorKeywords);console.log(`${y} 字幕下载结果:`,{subtitleError:w,needsAuthForSubtitle:I}),I&&console.warn(`${y} ⚠️ 字幕下载需要授权,尝试从缓存音频提取...`),console.log(`${y} Step 2: 字幕缺失或不完整,优先提取缓存音频...`),p(t.id,50,"subtitles","下载音频");let v=null,k="download";try{let e=await s("ytdlp_extract_audio_from_playback_cache",{url:t.url});if(h(t.id))return{success:!1,handled:!0,platform:u.name};if(e?.success&&e.file_path){let t=Number(o.duration||0),r=Number(e.duration||0);t>0&&r>0&&r<.9*t?console.warn(`${y} ⚠️ 缓存音频时长偏短,回退重新下载`,{expectedDuration:t,cachedDuration:r}):(v=e,k="cache",console.log(`${y} ✅ 已从缓存视频提取音频:`,e.file_path))}else console.log(`${y} 未命中可用播放缓存,准备下载音频`)}catch(e){console.warn(`${y} 从缓存视频提取音频失败,回退下载:`,e)}if(!v?.success||!v.file_path){let r;try{let{listen:a}=await e.A(734371);r=await a("ytdlp-audio-progress",e=>{var r;let a=e.payload;if(a?.url&&a.url!==t.url)return;let i=(r=Number(a?.progress),!Number.isFinite(r)||r<=0?null:Math.min(68,50+Math.round(r/100*18)));null!=i&&p(t.id,i,"subtitles",a?.message||"下载音频")})}catch(e){console.warn(`${y} 无法监听音频下载进度:`,e)}
9try{if(v=await s("ytdlp_download_audio",{url:t.url}),h(t.id))return{success:!1,handled:!0,platform:u.name};if(v?.success&&v.file_path){let e=Number(o.duration||0),r=Number(v.duration||0);if(e>0&&r>0&&r<.9*e&&(console.warn(`${y} ⚠️ 下载/缓存音频时长偏短,强制重下`,{expectedDuration:e,downloadedDuration:r}),v=await s("ytdlp_download_audio",{url:t.url,forceRedownload:!0}),h(t.id)))return{success:!1,handled:!0,platform:u.name}}k="download"}finally{r?.()}}if(h(t.id))return{success:!1,handled:!0,platform:u.name};if(!v?.success||!v.file_path){let e=v?.error||"音频下载失败";if(console.warn(`${y} ⚠️ 音频下载失败:`,e),u.canFallbackToServer)return console.log(`${y} 回退到服务端字幕处理`,{error:e}),{success:!1,handled:!1,platform:u.name};if(c(e,u.authErrorKeywords))return f(t.id,`${u.displayName} 需要登录授权,请在设置中授权后重试`),T(t.id),{success:!1,handled:!0,error:e,needsAuth:!0,platform:u.name};return f(t.id,`${u.displayName} 内容下载失败: ${e}`),T(t.id),{success:!1,handled:!0,error:e,platform:u.name}}let C=Number(o.duration||0),E=Number(v.duration||0),P=i(E,C);if("ok"!==P.action&&console.warn(`${y} ⚠️ 音频时长仍偏短,疑似账号无付费/会员观看权限`,{action:P.action,finalAudioDuration:E,expectedDuration:C,coverage:P.coverage.toFixed(2)}),"fail-too-short"===P.action){let e=a(P.previewSeconds),r=a(P.totalSeconds);return f(t.id,`${u.displayName} 视频:当前账号可能无付费/会员观看权限,仅能获取 ${e} 分钟内容(视频共 ${r} 分钟)。请到网站设置配置账号授权后重试。`),T(t.id),{success:!1,handled:!0,error:"audio-truncated-likely-no-purchase",platform:u.name}}"warn-preview"===P.action&&g(t.id,{kind:"paid-preview",previewSeconds:P.previewSeconds,totalSeconds:P.totalSeconds}),console.log(`${y} ✅ 音频${"cache"===k?"提取":"下载"}成功:`,v.file_path),p(t.id,65,"subtitles","上传音频"),console.log(`${y} Step 3: 上传音频进行转录...`);let _=null;try{if(!d){if(console.warn(`${y} 用户未登录,无法上传音频`),u.canFallbackToServer)return{success:!1,handled:!1,platform:u.name};return f(t.id,"用户未登录,无法处理音频"),T(t.id),{success:!1,handled:!0,platform:u.name}}try{let{readFile:t}=await e.A(74012);console.log(`${y} 读取本地音频文件:`,v.file_path);let r=await t(v.file_path),a=v.file_path.split("/").pop()||"audio.mp3",i=new File([r],a,{type:"audio/mpeg"});console.log(`${y} 上传音频文件:`,i.name,i.size,"bytes"),_=await m(i,d),console.log(`${y} 音频已上传到 OSS:`,_)}catch(l){console.warn(`${y} 前端上传失败,回退 Tauri 原生上传:`,l),p(t.id,68,"subtitles","上传音频(重试)");let r=v.file_path.split(/[/\\]/).pop()||"audio.mp3",{uploadUrl:a,filePath:i}=await n.apiClient.file.getUploadUrl.query({fileName:r,contentType:"audio/mpeg"}),{uploadLocalFileToOSS:o,ossBaseUrl:s}=await e.A(355216);await o(v.file_path,a,"audio/mpeg"),_=`${s}/${i}`,console.log(`${y} Tauri 原生上传成功:`,_)}}catch(e){if(console.warn(`${y} 音频上传 OSS 失败:`,e),u.canFallbackToServer)return{success:!1,handled:!1,platform:u.name};return f(t.id,"音频上传失败"),T(t.id),{success:!1,handled:!0,platform:u.name}}if(!_){if(console.log(`${y} 音频上传失败`),u.canFallbackToServer)return{success:!1,handled:!1,platform:u.name};return f(t.id,"音频上传失败"),T(t.id),{success:!1,handled:!0,platform:u.name}}p(t.id,75,"subtitles","提交转录任务");let A=await n.apiClient.contentPipeline.transcribe.mutate({contentId:o.dbId,audioUrl:_,forceFresh:!0===t.isRetry,audioConfig:t.audioConfig}).then(e=>{let t="failed"===e.subtitle.status;return{success:!t,error:t?"转录任务提交失败":void 0}}).catch(async e=>(console.warn(`${y} pipeline transcribe 失败,回退旧接口:`,e),n.apiClient.content.transcribeAudioUrlSubmit.mutate({audioUrl:_,contentId:o.dbId,isRetry:!0===t.isRetry,audioConfig:t.audioConfig})));if(h(t.id))return{success:!1,handled:!0,platform:u.name};if(!A.success){if(console.warn(`${y} ⚠️ 转录任务提交失败:`,A.error),u.canFallbackToServer)return{success:!1,handled:!1,platform:u.name};return f(t.id,A.error||"转录任务提交失败"),T(t.id),{success:!1,handled:!0,error:A.error,platform:u.name}}return console.log(`${y} ✅ 转录任务已提交:`,{externalTaskId:"externalTaskId"in A?A.externalTaskId:"(pipeline)",reused:"reused"in A?A.reused:void 0}
9),p(t.id,80,"subtitles","语音转录中"),{success:!1,handled:!1,platform:u.name}}catch(e){if(console.error(`${y} ❌ 本地提取失败:`,e),u.canFallbackToServer)return{success:!1,handled:!1,platform:u.name};return f(t.id,e.message||"本地字幕提取失败"),T(t.id),{success:!1,handled:!0,error:e.message,platform:u.name}}},[d,m,p,f,g,h,b,T]),cleanupTask:T,getPlatformConfig:l,canExtractLocally:u}}],96540)},207333,e=>{"use strict";var t=e.i(191788),r=e.i(679935),a=e.i(193905),i=e.i(874010),o=e.i(496323),n=e.i(481304),s=e.i(892471),l=e.i(112349);let u=0;function c(){let{t:e}=(0,a.useTranslation)(),{analytics:c}=(0,l.useAnalytics)(),{submitUrls:d}=(0,s.useSubmitUrls)();return(0,t.useCallback)(async t=>{let a=Date.now();if(a-u<300)return void console.debug("Global paste debounced - too frequent");u=a;try{if((0,o.isAigtdBuild)()&&(0,o.isTauri)()){let t=await (0,i.readTauriClipboard)({prioritizeFiles:!0});if(t.hasFiles||t.hasImage){console.log("[usePaste] AIGTD: Files/images detected, please use Cmd+V"),r.toast.info(e("检测到剪贴板中有文件"),{description:e("请使用 Cmd/Ctrl+V 粘贴创建任务")});return}}let a="string"==typeof t?t:await navigator.clipboard.readText();if(!a.trim()){(0,r.toast)(e("剪贴板为空"),{description:e("请确保剪贴板中包含视频链接")}),c.track("PasteButton Clicked",{success:!1,reason:"empty_clipboard"});return}await d(a,{useQueue:!0,clearInput:!1})?c.track("PasteButton Clicked",{success:!0}):c.track("PasteButton Clicked",{success:!1,reason:"invalid_urls"})}catch(a){var s;console.error("Failed to read clipboard:",a);let t=(0,n.getShortcutKey)("V",(0,o.isTauri)());(0,r.toast)(e("读取剪贴板失败"),{description:(s=e("浏览器拦住了剪贴板,请用快捷键"),s.replaceAll("{{shortcut}}",t))}),c.track("PasteButton Clicked",{success:!1,reason:"clipboard_error"})}},[e,c,d])}e.s(["useGlobalPasteListener",0,function(){let e=c(),{analytics:r}=(0,l.useAnalytics)();(0,t.useEffect)(()=>{if((0,o.isAigtdBuild)())return;let t=t=>{let a=document.activeElement;if(a&&("INPUT"===a.tagName||"TEXTAREA"===a.tagName||a.isContentEditable))return;let i=t.clipboardData?.items;if(i&&Array.from(i).some(e=>e.type.startsWith("image/")))return;let o=t.clipboardData?.getData("text")??"";t.preventDefault(),r.track("PasteShortcut Used"),e(o)};return document.addEventListener("paste",t),()=>document.removeEventListener("paste",t)},[r,e])},"usePaste",0,function(){return{handlePaste:c()}}],207333)},109078,779885,716237,e=>{"use strict";var t=e.i(191788),r=e.i(679935),a=e.i(203828),i=e.i(960368),o=e.i(579319),n=e.i(251686),s=e.i(345303),l=e.i(193905);function u(e){if("string"!=typeof e||!e.startsWith("{")||!e.includes("__rateLimit"))return null;try{let t=JSON.parse(e);if(t?.__rateLimit!==!0)return null;return t}catch{return null}}function c(e){if(!e)return null;for(let t of[e?.message,e?.shape?.message,e?.data?.message,"string"==typeof e?.cause?e.cause:e?.cause?.message,e?.response?.data?.message,e?.response?.data?.error?.message]){let e=u(t);if(e)return e}return null}var d=e.i(496323);async function m(t){if((0,d.isTauri)()&&t.id)try{let{invoke:r}=await e.A(639641);await r("cli_complete_job",t)}catch(e){console.warn("[CLI] cli_complete_job failed:",e)}}var p=e.i(361934);function f(e){return"string"==typeof e&&e.trim().length>0}function g(e){return e?(()=>{try{return decodeURIComponent(e)}catch{return e}})().trim().toLowerCase().replace(/\\/g,"/").replace(/-[a-z0-9]+-encoded\.(mp3|m4a|webm)(\?.*)?$/i,"").replace(/-encoded\.(mp3|m4a|webm)(\?.*)?$/i,"").replace(/-compressed\.mp4(\?.*)?$/i,"").replace(/\.(mp3|m4a|mp4|wav|webm|mov|m4v)(\?.*)?$/i,""):""}function h(e){let t=(e.split("?")[0]||e).split("/");return t[t.length-1]||""}function b(e){for(let t of[e.generated,e.videoInfo,e.cached])if(f(t))return t.trim();return null}e.s(["hasUsableSummary",0,f,"pickRecoveredSummary",0,b,"taskMatchesViewedContent",0,function(e,t){let r=t.contentId?.trim();if(r&&(e.contentId===r||e.videoDetail?.dbId===r))return!0;let a=g(t.url);if(!a)return!1;for(let t of[e.url,e.videoDetail?.url,e.localFilePath,e.sourceFilePath]){let e=g(t);if(!e)continue;if(e===a)return!0;let r=h(a),i=h(e);if(r.length>=12&&r===i)return!0}return!1}],779885);var y=e.i(285562),T=e.i(748629),S=e.i(226568),w=e.i(994421),I=e.i(49
90914),v=e.i(975682),k=e.i(177946),C=e.i(197083),E=e.i(184603),P=e.i(325669),_=e.i(983410),A=e.i(994135),L=e.i(866020),$=e.i(96540),R=e.i(666111),U=e.i(955129),x=e.i(134936);let M="YOUTUBE_SUBTITLE_ERROR",N="BILIBILI_SUBTITLE_ERROR";function F(e,t){return(0,d.isTauri)()?t:(0,x.isYouTubeVideo)(e)&&!t.startsWith(M)?`${M}:${t}`:e.includes("bilibili.com/video")&&!t.startsWith(N)?`${N}:${t}`:t}function D(e,t,r){if(!e)return t;let a=[],i=new Set,o=e=>{if("string"!=typeof e)return;let t=e.trim();if(!(!t||i.has(t))){if(i.add(t),r){let e=u(t);if(e){let t;return void a.push((t=r("5h"===e.window?"rateLimitWindow_5h":"rateLimitWindow_7d"),r("rateLimitMessage_summary",{tier:e.tier,window:t,resetIn:e.resetIn})))}}a.push(t)}};o(e?.message),o(e?.shape?.message),o(e?.data?.message),o("string"==typeof e?.cause?e.cause:e?.cause?.message),o(e?.response?.data?.message),o(e?.response?.data?.error?.message);let n=a.length>0?a.join(" · "):t;return(0,U.containsTechLeak)(n)?(0,U.toClientInternalErrorMessage)(n,t):n}function O(e,t,r="errors:page.somethingWentWrong"){return e.startsWith("errors:")?t({message:e},r):e}function B(e,t,r){let a=t||r;if("number"==typeof a&&a>0){let t=Math.floor(a/60),r=Math.floor(a%60);return t>0?`${e} 音频 ${t} 分 ${r.toString().padStart(2,"0")} 秒`:`${e} 音频 ${r} 秒`}return e}e.s(["BILIBILI_SUBTITLE_ERROR",0,N,"YOUTUBE_SUBTITLE_ERROR",0,M,"extractErrorMessage",0,D,"localizeErrorsCode",0,O,"withPlatformErrorPrefix",0,F],716237);class q extends Error{isPipelineWireUnavailable=!0;constructor(e){super(`contentPipeline wire unavailable: ${e}`)}}function Q(e){return!!e?.isPipelineWireUnavailable}async function H(e){let t=await I.apiClient.contentPipeline.fetch.mutate({url:e.url||void 0,contentId:e.contentId||void 0,target:e.target,forceFresh:e.forceFresh,audioConfig:e.audioConfig,clientTitle:e.clientTitle,includeDetail:!0}),r=t?.detail;if(!r)throw new q("fetch returned no detail projection");return r}async function W(e){let t=await I.apiClient.contentPipeline.summarize.mutate({url:e.url,promptConfig:e.promptConfig}),r=t?.summaryText;if("string"!=typeof r)throw new q("summarize returned no summaryText (promptConfig ignored?)");return{summary:r,contentId:t?.id}}async function G(e,t){return e.content.info.fetch({url:t.url,contentId:t.contentId,audioConfig:t.audioConfig,skipSubtitleTask:t.skipSubtitleTask,isRefresh:t.isRefresh,clientTitle:t.clientTitle})}async function V(e){let t=await I.apiClient.video.summaryBySetting.mutate({url:e.url,promptConfig:e.promptConfig});return{summary:t.summary,contentId:t.contentId}}let Y="__pipelineWire";async function z(e,t){try{let e={url:t.url||void 0,contentId:t.contentId||void 0,target:t.skipSubtitleTask?"metadata":"subtitle",forceFresh:t.isRefresh,audioConfig:t.audioConfig,clientTitle:t.clientTitle},r=await H(e);return r[Y]=!0,r}catch(r){return Q(r)||console.warn("[TaskProcessor] contentPipeline.fetch 失败,回退 content.info 入口:",r),G(e,{url:t.url,contentId:t.contentId,audioConfig:t.audioConfig,skipSubtitleTask:t.skipSubtitleTask,isRefresh:t.isRefresh,clientTitle:t.clientTitle})}}async function K(e){var t;if(t=e.videoInfo,t?.[Y])try{return await W({url:e.url,promptConfig:e.promptConfig})}catch(e){if(!Q(e))throw e;console.warn("[TaskProcessor] contentPipeline.summarize 能力缺失,回退 summaryBySetting")}return V({url:e.url,promptConfig:e.promptConfig})}e.s(["useTaskProcessor",0,function(){let{t:e}=(0,l.useTranslation)(),u=(0,L.useTranslateError)(),{summarySetting:d,audioConfig:g}=(0,R.default)(),h=(0,v.useUser)(),U=(0,v.useSupabaseClient)(),{isPaidMemberUser:x,isProPaidMemberUser:M}=(0,_.useUserOrdersAndMemberType)(),N=(0,C.useUserIntegrations)(),q=(0,t.useRef)(new Map),Q=(0,a.useRouter)(),H=I.api.useUtils(),W=(0,A.useInvalidateUserContent)(),G=(0,E.useAttachToCollection)(),V=(0,T.useAppStore)(e=>e.uploadFileToOSS),Y=(0,T.useAppStore)(e=>e.fetchSelectTranslation),j=(0,T.useAppStore)(e=>e.updateContent),X=(0,w.useTaskQueueStore)(e=>e.queue),J=(0,w.useTaskQueueStore)(e=>e.updateTaskProgress),Z=(0,w.useTaskQueueStore)(e=>e.updateTaskVideoDetail),ee=(0,w.useTaskQueueStore)(e=>e.setTaskError),et=(0,t.useCallback)((e,t)=>{ee(e,t);let r=w.useTaskQueueStore.getState().queue.find(t=>
9t.id===e);r?.cliJobId&&m({id:r.cliJobId,ok:!1,error:t,needs_auth:!!t&&/授权|登录|会员|充电|Sign in|cookies?/i.test(t)})},[ee]),er=(0,w.useTaskQueueStore)(e=>e.setTaskWarning),ea=(0,w.useTaskQueueStore)(e=>e.setTaskCompleted),ei=(0,w.useTaskQueueStore)(e=>e.setMaxConcurrent),eo=(0,w.useTaskQueueStore)(e=>e.dispatchTaskEvent),en=(0,w.useTaskQueueStore)(e=>e.enterRateLimitWait),es=(0,w.useTaskQueueStore)(e=>e.clearRateLimited),el=(0,w.useTaskQueueStore)(e=>e.requeueForSubtitleTimeout),eu=(0,w.useTaskQueueStore)(e=>e.rateLimitedUntil),ec=(0,t.useCallback)(()=>w.useTaskQueueStore.getState().queue||[],[]);(0,t.useEffect)(()=>{ei(M?w.MAX_CONCURRENT_PRO:w.MAX_CONCURRENT_PLUS)},[M,ei]);let ed=(0,t.useCallback)(e=>ec().some(t=>t.id===e),[ec]),em=(0,t.useCallback)(e=>{let t=ed(e);return t||(q.current.delete(e),console.log("⏹️ 任务已被取消,停止后续处理:",e)),console.log("任务仍在活跃,即将处理任务:",e),!t},[ed]),ep=(0,t.useCallback)(async(t,a)=>{if(em(t.id))return;let s="";try{var l;let e=!!t.isRetry,o={...d,customPrompt:t.customPrompt??""},u=e?{...o,isRefresh:!0}:o;console.log("========开始自动生成总结========",{taskId:t.id,contentId:a.dbId,customInput:u.customPrompt,model:u.model,shouldForceRefresh:e,isPaidMemberUser:x});let c=null;if(x){let r=d.outputLanguage||i.DEFAULT_LANGUAGE,o={contentId:a.dbId,outputLanguage:r,summaryType:n.CHAPTER_SUMMARY_TYPE.TIMELINE,...e?{retryFlag:!0}:{}},l=K({url:t.url,promptConfig:u,videoInfo:a}),m=null!=w.useTaskQueueStore.getState().rateLimitedUntil?Promise.resolve(null):H.video.chapterSummary.fetch(o).catch(e=>(console.warn("章节总结预取失败,但不影响主流程:",e),null)),p=await l;if(em(t.id))return;if(!p.summary)throw console.error("[useTaskProcessor] empty summary from server",p),Error(`总结生成失败:服务端返回空内容(contentId=${p.contentId||"n/a"})`);s=p.summary,J(t.id,95,"chapter");let f=await m;if(em(t.id))return;e&&f&&H.video.chapterSummary.setData({contentId:a.dbId,outputLanguage:r,summaryType:n.CHAPTER_SUMMARY_TYPE.TIMELINE},f),c=f??null,console.log("========总结和章节总结生成/预取成功========",{taskId:t.id,summaryLength:p.summary?.length||0,hasChapterSummary:!!f?.chapterSummary,chapterCached:"数据已缓存到 React Query,SummaryWithChapter 组件将直接使用缓存"})}else{let e=await K({url:t.url,promptConfig:u,videoInfo:a});if(em(t.id))return;if(!e.summary)throw console.error("[useTaskProcessor] empty summary from server",e),Error(`总结生成失败:服务端返回空内容(contentId=${e.contentId||"n/a"})`);s=e.summary,console.log("========总结生成成功========",{taskId:t.id,summaryLength:e.summary?.length||0})}if(e){let e=d.outputLanguage||i.DEFAULT_LANGUAGE;try{await Promise.all([H.video.cachedSummary.invalidate(),H.video.chapterSummary.invalidate({contentId:a.dbId,outputLanguage:e,summaryType:n.CHAPTER_SUMMARY_TYPE.TIMELINE})])}catch(e){console.warn("[useTaskProcessor] invalidate after summary failed:",e)}}if(J(t.id,100,"completed"),ea(t.id,a.dbId||"",a),t.cliJobId){let e=s||a.summary;m({id:t.cliJobId,ok:!0,summary:e,subtitles:a.subtitlesArray,json_body:{success:!0,id:a.dbId||"",summary:e,detail:{subtitlesArray:a.subtitlesArray||[]}}})}(0,k.runAutoSyncExportOnTaskComplete)({videoDetail:{...a,summary:s||a.summary},summary:s,chapterSummary:c,integrations:N});let f=w.useTaskQueueStore.getState().queue.find(e=>e.id===t.id)??t,g=(0,P.resolveTaskTargetCollectionId)(f,{readFormTarget:()=>T.useAppStore.getState().targetCollectionId}),h=a.dbId||f.contentId;g&&h&&await G(g,[h]),es(),W.forCompletedTask({videoUrl:t.url}),q.current.delete(t.id);let b=w.useTaskQueueStore.getState().queue,y=b.filter(e=>"pending"===e.status).length,S=b.filter(e=>"processing"===e.status&&e.id!==t.id).length;console.log("🔔 决定通知行为:",{taskId:t.id,pendingTasks:y,processingTasks:S,totalQueueLength:b.length,isPaidMemberUser:x});let I=`视频"${t.videoDetail?.title||t.title}"总结完成`;((l={pendingTasks:y,processingTasks:S,currentPath:Q.asPath||Q.pathname}).pendingTasks>0||l.processingTasks>0?1:(0,p.isMiniPlayerDetailPath)(l.currentPath))?r.toast.success(I,{description:x?"已自动生成总结和章节总结内容,点击查看":"已自动生成总结内容,点击查看",action:{label:"查看总结",onClick:()=>{Q.push(`/content/${a.dbId}`)}}}):(r.toast.success(I,{description:x?"已自动生成总结和章节总结内容,正在为您打开页面...":"已自动生成总结内容,正在为您打开页面..."}),setTimeout(()=>{Q.push(`/content/${a.dbId}`)},1e3))}catch(m){if(console.error("处理总结失败:",m),em(t.id))return;let i=c(m);if(i){en(t.id,Date.now()+6e4*Math.max(i.resetIn,1)),q.current.delete(t.id);return}let n=b({generated:s,videoInfo:a?.summary});if(!n&&(a?.dbId||t.url))try{let e=await H.video.cachedSummary.ensureData({summarySetting:{...S.SUMMARY_SETTINGS_DEFAULTS,outputLanguage:d.outputLanguage,detailLevel:d.detailLevel},...a?.dbId?{contentId:a.dbId}:{videoUrl:t.url},shouldNotSave:!0});n=b({cached:e?.summary})}catch(e){console.warn("[useTaskProcessor] recover cachedSummary failed:",e)}if(f(n)){J(t.id,100,"completed"),ea(t.id,a.dbId||"",{...a,summary:n}),q.current.delete(t.id),W.forCompletedTask({videoUrl:t.url});let i=t.videoDetail?.title||t.title||"";f(s)?r.toast.success(e("视频「{{title}}」总结完成",{title:i}
9)):r.toast.warning(e("视频「{{title}}」已有总结",{title:i}),{description:e("重新生成未完成,仍显示已有总结")});return}let l=D(m,e("总结生成失败"),e),u=e(l);et(t.id,u),q.current.delete(t.id),r.toast.error(`视频"${t.videoDetail?.title||t.title}"总结失败`,{description:u,action:u.includes(o.PAYMENT_ERROR_MESSAGE)?{label:"升级会员",onClick:()=>{Q.push("/shop")}}:{label:"重试",onClick:()=>{J(t.id,85,"summary"),setTimeout(()=>ep(t,a),1e3)}}})}},[J,ea,et,d,x,N,Q.pathname,H,W,G,em,en,es]),ef=(0,t.useCallback)(async(t,a)=>{if(em(t.id))return;let i=T.useAppStore.getState().savedVideoDetail?.url,o=!i||i===t.url;if(o&&j(a),!t.autoTranslateLanguage){J(t.id,85,"summary"),await ep(t,a);return}if(!o){console.log("⏭️ 跳过自动翻译(非当前查看的视频),直接进入总结阶段:",t.id),J(t.id,85,"summary"),await ep(t,a);return}try{if(console.log("========开始自动翻译========",{taskId:t.id,targetLanguage:t.autoTranslateLanguage,subtitlesCount:a.subtitlesArray?.length||0}),J(t.id,75,"translating"),em(t.id))return;let e={[t.autoTranslateLanguage]:!0};if(await Y(e),em(t.id))return;console.log("========自动翻译完成========",{taskId:t.id,targetLanguage:t.autoTranslateLanguage}),J(t.id,85,"summary"),await ep(t,a)}catch(o){if(console.error("自动翻译失败:",o),em(t.id))return;let i=D(o,e("请稍后在内容页手动翻译"));console.warn("翻译失败,继续生成总结:",i),r.toast.warning(e("字幕翻译失败,但会继续生成总结"),{description:i}),J(t.id,85,"summary"),await ep(t,a)}},[J,j,Y,ep,em,e]),{processSubtitlesLocally:eg,cleanupTask:eh}=(0,$.useLocalSubtitleExtractor)({user:h,uploadFileToOSS:V,updateTaskProgress:J,setTaskError:et,setTaskWarning:er,abortIfInactive:em,processAfterSubtitles:ef}),eb=(0,t.useCallback)(async(e,t)=>{let r,a;if(em(e.id))return;if(!t.dbId){et(e.id,"视频信息无效"),q.current.delete(e.id);return}let i=(r=[],a=!1,{nudge(){if(0===r.length){a=!0;return}let e=r;r=[],e.forEach(e=>e())},wait:e=>a?(a=!1,Promise.resolve("nudged")):new Promise(t=>{let a=setTimeout(()=>{r=r.filter(e=>e!==i),t("timeout")},e),i=()=>{clearTimeout(a),t("nudged")};r.push(i)})}),o=(0,y.subscribeContentSignal)(U,t.dbId,()=>i.nudge()),n=()=>o.unsubscribe(),l=t=>{console.error("处理字幕失败:",t),n(),em(e.id)||(et(e.id,F(e.url,D(t,"字幕处理失败"))),q.current.delete(e.id))};try{var c;let r,a,d={taskId:e.id,taskUrl:e.url,videoInfo:t,maxPollingCount:s.MAX_POLLING_COUNT,getPollCount:()=>q.current.get(e.id)||0,setPollCount:t=>q.current.set(e.id,t),clearPollCount:()=>q.current.delete(e.id),waitNext:()=>i.wait(o.isConnected()?3*s.SUBTITLE_POLLING_INTERVAL:s.SUBTITLE_POLLING_INTERVAL),stopSignal:n,abortIfInactive:()=>em(e.id),updateProgress:(t,r,a)=>J(e.id,t,r,a),failTask:t=>et(e.id,t),dispatchAuthRequired:(t,r)=>{eo(e.id,{type:"AUTH_REQUIRED",reason:t,platform:r??(0,$.getPlatformConfig)(e.url)?.name??"youtube",resumeStep:"extract"}),q.current.delete(e.id)},requeueForTimeout:()=>!((w.useTaskQueueStore.getState().queue.find(t=>t.id===e.id)?.subtitleAutoRetries||0)>=2)&&(q.current.delete(e.id),el(e.id),!0),translateError:(e,t)=>u(e,t),withPlatformPrefix:t=>F(e.url,t),onSubtitlesReady:async(r,a)=>{await ef(e,{...t,subtitlesArray:r,duration:a||t.duration})},onPollError:l},m=r=async()=>{if(d.abortIfInactive())return void d.stopSignal();let e=d.getPollCount();if(e>=d.maxPollingCount){d.stopSignal(),d.failTask("字幕处理超时,请稍后重试"),d.clearPollCount();return}let t=await I.apiClient.content.subtitlesTaskStatus.query({taskId:d.videoInfo.dbId});if(d.abortIfInactive())return void d.stopSignal();if(!t){d.setPollCount(e+1),d.waitNext().then(()=>r().catch(d.onPollError));return}let{status:a,subtitlesArray:i,duration:o}=t,n={pending:"排队中",processing:"语音转录中"}[a],s=n?B(n,o,d.videoInfo?.duration):void 0;if(d.updateProgress({pending:50,processing:70,completed:90,failed:0}[a]||50,"subtitles",s),"completed"===a&&i)d.stopSignal(),await d.onSubtitlesReady(i,o);else if("failed"===a)if(d.stopSignal(),t.authRequired)d.dispatchAuthRequired(t.authRequired.reason,t.authRequired.platform),d.clearPollCount();else if("retryable"in t&&!0===t.retryable&&d.requeueForTimeout())d.clearPollCount();else{let e=t.message||"字幕处理失败",r=e.startsWith("errors:")?d.translateError({message:e},"errors:subtitle.transcriptionFailed"):e;d.failTask(d.withPlatformPrefix(r)),d.clearPollCount()}else d.setPollCount(e+1),d.waitNext().then(()=>r().catch(d.onPollError))},p=(c={fallbackToLegacy:()=>m()},a=async()=>{let e;if(d.abortIfInactive())return void d.stopSignal();let t=d.getPollCount();if(t>=d.maxPollingCount){d.stopSignal(),d.failTask("字幕处理超时,请稍后重试"),d.clearPollCount();return}try{e=await I.apiClient.contentPipeline.observe.query({contentId:d.videoInfo.dbId})}catch(e){console.warn("[TaskProcessor] contentPipeline.observe 失败,回退 subtitlesTaskStatus 轮询:",e),await c.fallbackToLegacy();return}if(d.abortIfInactive())return void d.stopSignal();let r=e.subtitle;if("ready"===r.status){d.stopSignal();let t=await I.apiClient.contentPipeline.readSubtitles.query({contentId:d.videoInfo.dbId});if(d.abortIfInactive())return;d.updateProgress(90,"subtitles"),await d.onSubtitlesReady(t.subtitles,t.duration||e.duration);return}if("failed"===r.status){d.stopSignal();let e=r.errorMessage||"字幕处理失败";if("auth_required"===r.errorClass)d.dispatchAuthRequired(e),d.clearPollCount();else if("watchdog_timeout"===r.errorClass&&d.requeueForTimeout())d.clearPollCount();else{let t=e.startsWith("errors:")?d.translateError({message:e},"errors:subtitle.transcriptionFailed"):e;d.failTask(d.withPlatformPrefix(t)),d.clearPollCount()}return}let i="running"===r.status;d.updateProgress(i?70:50,"subtitles",B(i?"语音转录中":"排队中",e.duration,d.videoInfo?.duration)),d.setPollCount(t+1),d.waitNext().then(()=>a().catch(d.onPollError))});await p()}catch(e){l(e)}},[et,J,ef,em,eo,el,u,U]),ey=(0,t.useCallback)(async t=>{if(!em(t.id)){if(!h?.id){et(t.id,"用户未登录"),q.current.delete(t.id);return}try{if(t.isUploadedFile&&t.contentId){J(t.id,60,"subtitles");let e=await z(H,{url:t.url,contentId:t.contentId,audioConfig:g,isRefresh:t.isRetry});if(em(t.id))return;if(!e)throw Error("获取文件信息失败");if(Z(t.id,e),e.subtitlesArray&&e.subtitlesArray.length>0)return void await ef(t,e);await eb(t,e);return}J(t.id,10,"info");let e=(0,$.canExtractLocally)(t.url),r=t.audioConfig||g,a=await z(H,{url:t.url,contentId:"",audioConfig:r,skipSubtitleTask:e,isRefresh:t.isRetry,clientTitle:t.title});if(em(t.id))return;if(!a)throw Error("获取视频信息失败");if(console.log("========更新任务的视频详情========",a),Z(t.id,a),J(t.id,30,"info"),t.isRetry){let e=T.useAppStore.getState().savedVideoDetail?.url;e&&e!==t.url||T.useAppStore.getState().updateContent({...a,subtitlesArray:[]})}if(a.subtitlesArray&&a.subtitlesArray.length>0&&!t.isRetry)return void await ef(t,a);if(J(t.id,40,"subtitles"),(0,$.canExtractLocally)(t.url)){let e=(0,$.getPlatformConfig)(t.url);console.log(`[TaskProcessor] 🎬 检测到 ${e?.displayName} 视频,尝试本地字幕提取...`);let r=await eg(t,a);if(r.handled)return void(r.success?console.log(`[TaskProcessor] ✅ ${e?.displayName} 本地字幕提取成功`):console.log(`[TaskProcessor] ⚠️ ${e?.displayName} 本地字幕提取已处理(可能需要授权)`));console.log(`[TaskProcessor] ↪️ ${e?.displayName} 移交 pipeline observe 轮询`)}setTimeout(()=>{eb(t,a)},2*s.SUBTITLE_POLLING_INTERVAL)}catch(o){if(console.error("处理视频信息失败:",o),em(t.id))return;let r=c(o);if(r){en(t.id,Date.now()+6e4*Math.max(r.resetIn,1)),q.current.delete(t.id);return}let a=O(D(o,"获取视频信息失败",e),u),i=F(t.url,(0,$.getPlatformErrorMessage)(t.url,a));et(t.id,i),q.current.delete(t.id)}}},[h?.id,J,Z,et,ea,ef,eb,eg,g,em,en,u,e]);return(0,t.useEffect)(()=>{let e=X?.filter(e=>"processing"===e.status&&!e.isLocalMode)||[];e.length>0&&console.log("🎯 监听到processing任务数量:",e.length,e.map(e=>({id:e.id,title:e.title}
9))),e.forEach(e=>{q.current.has(e.id)?console.log("⏸️ 任务已在处理中,跳过:",e.id):(console.log("🚀 开始处理新任务:",e.id,e.title),q.current.set(e.id,0),ey(e))})},[X,ey]),(0,t.useEffect)(()=>()=>{q.current.clear()},[]),(0,t.useEffect)(()=>{if(!X)return;let e=new Set(X.map(e=>e.id));for(let t of Array.from(q.current.keys()))e.has(t)||q.current.delete(t)},[X]),(0,t.useEffect)(()=>{if(!eu)return;let e=setInterval(()=>{let e=w.useTaskQueueStore.getState();e.rateLimitedUntil&&(!e.queue.some(e=>"pending"===e.status||"processing"===e.status)&&Date.now()>=e.rateLimitedUntil?e.clearRateLimited():e.processNextTask())},15e3);return()=>clearInterval(e)},[eu]),{processVideoInfo:ey,processSubtitles:eb,processSummary:ep,cancelAllTasks:(0,t.useCallback)(e=>{let t=ec(),r=e&&e.length>0?e:t.filter(e=>"pending"===e.status||"processing"===e.status).map(e=>e.id);if(0===r.length)return{cancelled:0};let a=new Set(r);return w.useTaskQueueStore.setState(e=>{let t=e.queue.filter(e=>!a.has(e.id));return{queue:t,processingCount:t.filter(e=>"processing"===e.status).length}}),r.forEach(e=>q.current.delete(e)),setTimeout(()=>{w.useTaskQueueStore.getState().processNextTask()},50),{cancelled:r.length}},[ec])}}],109078)},866020,e=>{"use strict";var t=e.i(191788),r=e.i(193905);e.s(["useTranslateError",0,function(){let{t:e}=(0,r.useTranslation)();return(0,t.useCallback)((t,r="errors:page.somethingWentWrong")=>{let a=t?.message;if(!a)return e(r);let i=e(a);return i!==a?i:e(r)},[e])}])},184092,e=>{"use strict";var t=e.i(748629),r=e.i(975682);e.s(["useCheckUserAndLogin",0,()=>{let e=(0,r.useUser)(),a=(0,t.useAppStore)(e=>e.showSignIn);return{checkUser:function(){return e||a(!0),e}}}])},325669,e=>{"use strict";let t="bibigpt-folder-target-collection";e.s(["FOLDER_MONITOR_TARGET_COLLECTION_KEY",0,t,"resolveTaskTargetCollectionId",0,function(e,r){if(e.isLocalMode)return null;let a=e.targetCollectionId?.trim();return a?a:e.localFilePath||e.sourceFilePath?(r?.readFolderTarget??(()=>(function(){let e=(void 0)??("u">typeof globalThis&&"localStorage"in globalThis?globalThis.localStorage:null);if(!e)return null;try{let r=e.getItem(t);if(null==r)return null;let a=JSON.parse(r);if("string"!=typeof a)return null;let i=a.trim();return i.length>0?i:null}catch{return null}})()))():r?.readFormTarget?.()?.trim()||null}])},874010,e=>{"use strict";var t=e.i(496323);async function r(r){if(!(0,t.isTauri)())return{hasText:!1,hasImage:!1,hasFiles:!1};try{let t,a,i,o,n,{hasText:s,hasImage:l,hasFiles:u,readText:c,readFiles:d}=await e.A(718168);if(r?.prioritizeFiles){let[e,r,o]=await Promise.all([s(),l(),u()]);i=o,a=r,t=e}else{let e=await Promise.all([s(),l(),u()]);t=e[0],a=e[1],i=e[2]}i?n=(await d()).files.map(e=>e.path):t&&(o=await c());let m=a;return{hasText:t&&!i,hasImage:m,hasFiles:i,text:o,files:n}}catch(e){return console.error("[tauriClipboard] Failed to read clipboard:",e),{hasText:!1,hasImage:!1,hasFiles:!1}}}e.s(["readTauriClipboard",0,r])}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.