Sid Gifari File Manager
🏠 Root
/
home
/
genremedia08
/
thepassage.overlookedtracks.com
/
wp-content9
/
plugins
/
echo-knowledge-base
/
js
/
ai
/
Editing: admin-ai-content-analysis-sync.min.js
(function(){"use strict";const{useState:e,useEffect:s,useCallback:t,useRef:a,createContext:n,useContext:o,createElement:r}=wp.element;const{__:i}=wp.i18n;const{showError:c,showSuccess:l,makeApiRequest:d,showConfirmDialog:u}=window.EPKB_AI_Util_React||{};const{logError:y}=window.EPKBChatUtils||{};const g=()=>{try{const e=document.getElementById("epkb-ai-notifications");if(e){const s=e.querySelectorAll(".epkb-ai-notification-error");s.forEach((e=>{e.classList.add("epkb-ai-notification-fade-out");setTimeout((()=>{if(e.parentNode){e.remove()}}),300)}))}}catch(e){}};const p=n({analysisJob:{status:"idle",total:0,processed:0,percent:0,errors:0,type:"analysis"},analysisItems:[],setAnalysisItems:()=>{},showAnalysisProgress:false,setShowAnalysisProgress:()=>{},setAnalysisJob:()=>{},cancelAnalysisJob:()=>{},cleanupAnalysis:()=>{},setStopAnalysisPolling:()=>{},registerArticleUpdateHandler:()=>{},unregisterArticleUpdateHandler:()=>{},notifyAllArticleHandlers:()=>{}});window.EPKB_AI_ContentAnalysisSyncContext=p;window.EPKB_AI_ContentAnalysisSyncProvider=({children:n})=>{const[o,u]=e({status:"idle",total:0,processed:0,percent:0,errors:0,type:"analysis",remainingTime:null,completedArticles:0,averageTimePerArticle:0});const[f,b]=e([]);const[_,h]=e(false);const w=a(null);const k=a([]);s((()=>{if(o.status==="idle"&&_){h(false)}}),[o.status,_]);const A=t((e=>{if(typeof e==="function"){k.current.push(e)}}),[]);const S=t((e=>{k.current=k.current.filter((s=>s!==e))}),[]);const $=t((e=>{k.current.forEach((s=>{try{s(e)}catch(e){y("AI Content Analysis","Error calling article update handler",{message:e?.message||"Unknown error"})}}))}),[]);const C=t(((e="unknown",s=true,t=false)=>{if(w.current&&typeof w.current==="function"){w.current();w.current=null}u({status:"idle",total:0,processed:0,percent:0,errors:0,type:"analysis"});h(false);if(e==="canceled"){g()}try{sessionStorage.removeItem("epkb_analysis_batch_state");sessionStorage.removeItem("epkb_analysis_article_queue");sessionStorage.removeItem("epkb_analysis_current_progress")}catch(e){}if(t){b([])}if(s){switch(e){case"canceled":l(i("Analysis canceled","echo-knowledge-base"));break;case"no_articles":c(i("No articles found to analyze","echo-knowledge-base"));break;case"error":break;case"completed":break}}}),[]);const I=t((async()=>{try{await d("content-analysis-batch-cancel",{method:"POST"});C("canceled",true)}catch(e){c(i("Failed to cancel analysis","echo-knowledge-base"));C("canceled",false)}}),[C]);s((()=>{const e=()=>{try{const e=sessionStorage.getItem("epkb_analysis_batch_state");if(e){const s=JSON.parse(e);if(s.status==="failed"||s.status==="completed"){sessionStorage.removeItem("epkb_analysis_batch_state");sessionStorage.removeItem("epkb_analysis_article_queue");sessionStorage.removeItem("epkb_analysis_current_progress");return false}if(s.status==="running"){const e=Date.now();const t=60*60*1e3;if(s.started_at&&e-s.started_at<t){u(s);h(true);return true}else{sessionStorage.removeItem("epkb_analysis_batch_state");sessionStorage.removeItem("epkb_analysis_article_queue");sessionStorage.removeItem("epkb_analysis_current_progress")}}}}catch(e){}return false};const s=e();const t=async()=>{if(!s){return}try{const e=await d("content-analysis-batch-status",{method:"GET"});const s=e.progress||{};if(s.cancel_requested||s.status==="canceled"||s.status==="idle"){C("canceled",false);return}if(s.status==="running"){const e=sessionStorage.getItem("epkb_analysis_article_queue");if(e){const s=JSON.parse(e);const t=sessionStorage.getItem("epkb_analysis_current_progress");let a=0;if(t){const e=JSON.parse(t);a=e.currentIndex||0}const n=e=>{k.current.forEach((s=>{try{s(e)}catch(e){y("AI Content Analysis","Error calling article update handler",{message:e?.message||"Unknown error"})}}))};const o=e=>{const s="epkb_content_analysis_cache_analysis_results_cache";try{let t={};const a=sessionStorage.getItem(s);if(a){t=JSON.parse(a).value||{}}e.forEach((e=>{t[String(e.id)]={id:e.id,score:e.score,importance:e.importance,scoreComponents:e.scoreComponents,status:e.status,analyzed_at:e.analyzed_at,cached_at:Date.now()}}));sessionStorage.setItem(s,JSON.stringify({value:t,timestamp:Date.now()}))}catch(e){}};const r=m(s,a,u,n,o);w.current=r}}}catch(e){if(e.status===404||e.code==="rest_no_route"){y("AI Content Analysis","API endpoints not implemented",{status:e.status,code:e.code})}}};t();return()=>{if(w.current&&typeof w.current==="function"){w.current()}}}),[]);const P=t((e=>{if(w.current&&typeof w.current==="function"){w.current()}w.current=e}),[]);return r(p.Provider,{value:{analysisJob:o,setAnalysisJob:u,analysisItems:f,setAnalysisItems:b,showAnalysisProgress:_,setShowAnalysisProgress:h,cancelAnalysisJob:I,cleanupAnalysis:C,setStopAnalysisPolling:P,registerArticleUpdateHandler:A,unregisterArticleUpdateHandler:S,notifyAllArticleHandlers:$}},n)};const f=()=>{const e=o(p);if(!e){throw new Error("useContentAnalysisSyncContext must be used within ContentAnalysisSyncProvider")}return e};const m=(e,s,t,a,n)=>{let o=false;let r=null;let c=0;let d=0;let u=0;try{sessionStorage.setItem("epkb_analysis_article_queue",JSON.stringify(e))}catch(e){}const y=(e,s,t)=>{const a=s-e;const n=a*t;return n};const g=e=>{if(e===null||isNaN(e)||e<=0){return i("Calculating...","echo-knowledge-base")}const s=Math.ceil(e/1e3);if(s<60){return`${s}s`}else if(s<3600){const e=Math.floor(s/60);const t=s%60;return t>0?`${e}m ${t}s`:`${e}m`}else{const e=Math.floor(s/3600);const t=Math.floor(s%3600/60);return t>0?`${e}h ${t}m`:`${e}h`}};async function p(){for(let r=s;r<e.length;r++){if(o)break;const s=e[r];try{sessionStorage.setItem("epkb_analysis_current_progress",JSON.stringify({currentIndex:r,article_id:s}))}catch(e){}if(a){a([{id:s,status:"analyzing",analyzed_at:"Processing..."}])}u=Date.now();const l=await b(s,a);if(l.success){const o={id:l.data.id,title:l.data.title,score:l.data.score||0,scoreComponents:l.data.scoreComponents||[],status:"analyzed",analyzed_at:l.data.analyzed_at||(new Date).toISOString()};if(a){a([o])}if(n){n([o])}if(l.data.details){try{const e=`article_analysis_${s}`;const t={status:l.data.status,title:l.data.title,score:l.data.score,scoreComponents:l.data.scoreComponents,analyzed_at:l.data.analyzed_at,...l.data.details.tags_analysis,readability_analysis:l.data.details.readability_analysis,gap_analysis:l.data.details.gap_analysis};sessionStorage.setItem(e,JSON.stringify({data:t,timestamp:Date.now(),article_id:s}))}catch(e){console.warn(`[Content Analysis] Failed to cache batch analysis for article ${s}:`,e)}}const i=r+1;const p=Date.now()-u;c+=p;d++;const f=Math.round(i/e.length*100);const m=d>0?c/d:0;const b=y(d,e.length,m);const _=g(b);t((e=>({...e,processed:i,percent:f,remainingTime:_,completedArticles:d,averageTimePerArticle:m})));try{const e=JSON.parse(sessionStorage.getItem("epkb_analysis_batch_state")||"{}");e.processed=i;e.percent=f;sessionStorage.setItem("epkb_analysis_batch_state",JSON.stringify(e))}catch(e){}}else{const e=l.error||i("Analysis failed","echo-knowledge-base");if(a){a([{id:s,status:"error",analyzed_at:"Error",error_message:e}])}t((e=>({...e,errors:e.errors+1,processed:r+1})))}if(!o&&r<e.length-1){await new Promise((e=>setTimeout(e,500)))}}if(!o){t((e=>({...e,status:"completed",percent:100})));l(i("Content analysis completed successfully!","echo-knowledge-base"));try{sessionStorage.removeItem("epkb_analysis_batch_state");sessionStorage.removeItem("epkb_analysis_article_queue");sessionStorage.removeItem("epkb_analysis_current_progress")}catch(e){}setTimeout((()=>{t({status:"idle",total:0,processed:0,percent:0,errors:0,type:"analysis"})}),5e3)}}p();return()=>{o=true;if(r){clearTimeout(r);r=null}}};async function b(e,s){const t=3;const a=["tags","readability","gap"];let n=0;for(const o of a){let a=0;let r=false;let c=null;while(a<t&&!r){try{if(s&&a===0){s([{id:e,status:"analyzing",analyzed_at:`Processing ${o}...`}])}else if(s&&a>0){s([{id:e,status:"analyzing",analyzed_at:`Retrying ${o} (${a}/${t})...`}])}const l=await d("content-analysis-process-article",{method:"POST",data:{article_id:e,analysis_type:o},suppressNotifications:true});if(l.success){r=true;n=0;if(l.complete===true){return{success:true,data:l}}}else if(l.can_retry&&l.reason!="execution_time_too_low"){n++;if(n>=t){c=i("Retry limit reached while contacting AI.","echo-knowledge-base");break}console.warn(`[Content Analysis] Retryable response received for article ${e} (${o}). Retry attempt ${n} of ${t}. Reason: ${l.message||l.reason||"Unknown"}`);a=0;await new Promise((e=>setTimeout(e,n*1e3)))}else{c=l.message||i("Analysis failed","echo-knowledge-base");break}}catch(s){c=s.message||"Unknown error 01";if(s&&s.reason!="execution_time_too_low"&&(s.can_retry||s.code==="invalid_json")&&a<t-1){a++;console.warn(`[Content Analysis] Retryable exception for article ${e} (${o}). Retry attempt ${a} of ${t}.`,s);await new Promise((e=>setTimeout(e,a*1e3)));continue}break}}if(!r){return{success:false,error:`${o} analysis failed: ${c}`}}}return{success:false,error:"Article processing incomplete"}}const _=async(e,s,t,a,n,o)=>{try{const a=await d("content-analysis-batch-start",{method:"POST",data:{article_ids:e}});if(a.success){const a=Array.isArray(e)?e:[];s({status:"running",total:a.length,processed:0,percent:0,errors:0,type:"analysis"});const n=m(a,0,s,t,o);return{success:true,stopFunction:n}}}catch(e){if(e&&e.error==="job_active"){return{success:false,needsConfirmation:true,message:e.message}}const s=e&&e.error||"error";const t=e&&(e.user_message||e.admin_message||e.message)||i("Failed to start analysis","echo-knowledge-base");const n=s==="no_articles"?"no_articles":"error";if(n==="error"){c(t)}a(n,n==="no_articles");return{success:false}}};window.EPKB_AI_ContentAnalysisControls=({selectedArticleIds:s=[],disabled:a=false,onArticleUpdate:n,onAnalysisStart:o=null,updateCacheCallback:c=null})=>{const l=f();const{analysisJob:d,setAnalysisJob:y,setAnalysisItems:g,setShowAnalysisProgress:p,cancelAnalysisJob:m,cleanupAnalysis:b,setStopAnalysisPolling:h,notifyAllArticleHandlers:w}=l;const[k,A]=e(false);const S=t((async()=>{A(true);p(true);const e={status:"running",total:typeof s==="string"?0:s.length,processed:0,percent:0,errors:0,type:"analysis",started_at:Date.now(),remainingTime:i("Calculating...","echo-knowledge-base"),completedArticles:0,averageTimePerArticle:0};y(e);try{sessionStorage.setItem("epkb_analysis_batch_state",JSON.stringify(e))}catch(e){}if(o){o()}if(typeof s!=="string"&&s.length>0){const e=s.map(((e,s)=>({id:e,status:"analyzing",analyzed_at:s===0?"Processing...":"Queued"})));g(e);if(n){n(e)}if(w){w(e)}}const t=e=>{if(n){n(e)}if(w){w(e)}};const a=await _(Array.isArray(s)?s:[],y,t,b,p,c);if(a.needsConfirmation){const e=await u({title:i("Analysis Job Running","echo-knowledge-base"),message:a.message,confirmText:i("Cancel","echo-knowledge-base"),cancelText:i("Wait","echo-knowledge-base"),confirmButtonClass:"epkb-ai-button-danger"});if(e){await m();await new Promise((e=>setTimeout(e,500)));A(false);return}}if(a.success&&a.stopFunction){h(a.stopFunction)}else{if(typeof s!=="string"){const e=s.map((e=>({id:e,status:"not_analyzed",analyzed_at:null})));if(n){n(e)}if(w){w(e)}}}A(false)}),[s,y,g,p,n,o,h,b,m,w,c]);const $=d.status==="running";const C=!a&&(typeof s==="string"||s.length>0)&&!$&&!k;return r("div",{className:"epkb-ai-analysis-controls"},r("div",{className:"epkb-ai-form-group"},r("div",{className:"epkb-ai-selected-records-count"},`${typeof s==="string"?"All":s.length} ${i("articles selected for analysis","echo-knowledge-base")}`)),r("div",{className:"epkb-ai-analysis-buttons"},$?r("div",{style:{display:"flex",gap:"10px",flexDirection:"column"}},r("button",{className:"epkb-ai-button epkb-ai-button-primary disabled",disabled:true,style:{cursor:"not-allowed",background:"linear-gradient(135deg, #667EEA 0%, #764BA2 100%)",color:"#FFFFFF",opacity:.6}},i("Analysis in Progress","echo-knowledge-base")),r("button",{className:"epkb-ai-button epkb-ai-button-danger",onClick:m,style:{backgroundColor:"#d63638",borderColor:"#d63638",color:"#fff"}},i("Stop Analysis","echo-knowledge-base"))):r("button",{className:`epkb-ai-button epkb-ai-button-primary ${!C?"disabled":""}`,onClick:S,disabled:!C,style:{background:C?"linear-gradient(135deg, #667EEA 0%, #764BA2 100%)":"#ccc",color:"#FFFFFF",boxShadow:C?"0 4px 12px rgba(102, 126, 234, 0.3)":"none",opacity:C?1:.6}},i("Analyze Content","echo-knowledge-base"))))};window.EPKB_AI_ContentAnalysisProgressBar=()=>{const{analysisJob:e}=f();if(e.status==="idle")return null;let s="";if(e.status==="running"){if(e.total===0){s=i("Starting analysis...","echo-knowledge-base")}else{const t=Math.min(e.processed+1,e.total);const a=e.total===1?i("article","echo-knowledge-base"):i("articles","echo-knowledge-base");s=`${i("Analyzing","echo-knowledge-base")} ${t} ${i("of","echo-knowledge-base")} ${e.total} ${a}`}}else if(e.status==="completed"){const t=e.processed===1?i("article","echo-knowledge-base"):i("articles","echo-knowledge-base");s=`${i("Completed! Analyzed","echo-knowledge-base")} ${e.processed} ${t}`;if(e.errors>0){const t=e.errors===1?i("error","echo-knowledge-base"):i("errors","echo-knowledge-base");s+=` ${i("with","echo-knowledge-base")} ${e.errors} ${t}`}}else if(e.status==="failed"){const t=e.total===1?i("article","echo-knowledge-base"):i("articles","echo-knowledge-base");s=`${i("Analysis stopped after errors. Analyzed","echo-knowledge-base")} ${e.processed} ${i("of","echo-knowledge-base")} ${e.total} ${t}`}else if(e.status==="canceled"){s=i("Analysis canceled","echo-knowledge-base")}return r("div",{className:"epkb-ai-analysis-progress"},r("div",{className:"epkb-ai-progress-bar"},r("div",{className:"epkb-ai-progress-fill",style:{width:`${e.percent}%`,background:"linear-gradient(90deg, #667EEA 0%, #764BA2 100%)"}}),r("span",{className:"epkb-ai-progress-percentage"},`${e.percent}%`)),s&&r("p",{className:"epkb-ai-progress-message",style:{fontWeight:"bold",color:e.status==="failed"?"#d54e21":"#0073aa",fontSize:"14px",marginBottom:"5px"}},s),e.status==="running"&&e.total>1&&r("p",{className:"epkb-ai-progress-remaining-time",style:{fontSize:"13px",color:"#666",margin:"0",fontStyle:"italic"}},`${i("Remaining Time:","echo-knowledge-base")} ${e.completedArticles>0&&e.remainingTime?e.remainingTime:i("Calculating...","echo-knowledge-base")}`))};window.EPKB_AI_ContentAnalysisSync={startContentAnalysis:_,processArticleQueue:m,useContentAnalysisSyncContext:f}})();
Save
Cancel