Sid Gifari File Manager
🏠 Root
/
home
/
genremedia08
/
thepassage.overlookedtracks.com
/
wp-content9
/
plugins
/
echo-knowledge-base
/
js
/
ai
/
Editing: admin-ai-sync.min.js
(function(){"use strict";const{useState:e,useEffect:t,useCallback:s,useRef:r,createContext:n,useContext:o,createElement:c}=wp.element;const{__:a}=wp.i18n;const{showError:l,showSuccess:i,makeApiRequest:d}=window.EPKB_AI_Util_React||{};const{logError:u}=window.EPKBChatUtils||{};const p=n({job:{status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null},syncItems:[],setSyncItems:()=>{},showSyncTab:false,setShowSyncTab:()=>{},setJob:()=>{},cancelJob:()=>{},cleanupSync:()=>{},registerPostUpdateHandler:()=>{},unregisterPostUpdateHandler:()=>{},notifyAllHandlers:()=>{},setStopPolling:()=>{}});window.EPKB_AI_SyncContext=p;window.EPKB_AI_SyncProvider=({children:n})=>{const[o,g]=e({status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null});const[w,m]=e([]);const[h,k]=e(false);const S=r(null);const _=r([]);const P=s((e=>{if(typeof e==="function"){_.current.push(e)}}),[]);const I=s((e=>{_.current=_.current.filter((t=>t!==e))}),[]);const $=s((e=>{_.current.forEach((t=>{try{t(e)}catch(e){u("AI Sync","Error calling post update handler",{message:e.message||"Unknown error"})}}))}),[]);const A=s(((e="unknown",t=true,s=false)=>{if(S.current&&typeof S.current==="function"){S.current();S.current=null}g({status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null});if(s){m([]);k(false)}if(t){switch(e){case"canceled":i(a("Sync canceled","echo-knowledge-base"));break;case"no_posts":l(a("No posts found to sync","echo-knowledge-base"));break;case"error":break;case"completed":break}}}),[]);const T=s((async()=>{try{await d("cancel-all-sync",{method:"POST"});g({status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null});if(S.current&&typeof S.current==="function"){S.current();S.current=null}i(a("Sync canceled","echo-knowledge-base"))}catch(e){l(a("Failed to cancel sync","echo-knowledge-base"));g({status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null});if(S.current&&typeof S.current==="function"){S.current();S.current=null}}}),[g]);t((()=>{const e=async()=>{try{const e=await d("sync-progress",{method:"GET"});const t=e.progress||{};if(t.cancel_requested||t.status==="canceled"||t.status==="idle"){g({status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null});return}if(t.status==="running"||t.status==="scheduled"){g({status:t.status,total:t.total||0,processed:t.processed||0,percent:t.percent||0,errors:t.errors||0,type:t.type||"",collectionId:t.collection_id||null});if(S.current&&typeof S.current==="function"){S.current()}if(t.type==="direct"){const e=y(g,$);const t=f(g);S.current=()=>{e();t()}}else{S.current=b(g,$)}}}catch(e){}};e();return()=>{if(S.current&&typeof S.current==="function"){S.current()}}}),[$]);const E=s((e=>{$(e)}),[$]);const v=s((e=>{if(S.current&&typeof S.current==="function"){S.current()}S.current=e}),[]);t((()=>{const e=()=>{if(o.status==="running"&&o.type==="direct"){const e=`${window.epkb_ai_api?.rest_url||"/wp-json/"}epkb-ai-api/v1/admin/cancel-all-sync`;const t=JSON.stringify({});if(navigator.sendBeacon){const s=new Blob([t],{type:"application/json"});navigator.sendBeacon(e,s)}else{const s=new XMLHttpRequest;s.open("POST",e,false);s.setRequestHeader("Content-Type","application/json");s.setRequestHeader("X-WP-Nonce",window.epkb_ai_api?.nonce||"");s.send(t)}}};window.addEventListener("beforeunload",e);return()=>{window.removeEventListener("beforeunload",e)}}),[o.status,o.type]);return c(p.Provider,{value:{job:o,setJob:g,syncItems:w,setSyncItems:m,showSyncTab:h,setShowSyncTab:k,cancelJob:T,cleanupSync:A,registerPostUpdateHandler:P,unregisterPostUpdateHandler:I,notifyAllHandlers:E,setStopPolling:v}},n)};const g=()=>{const e=o(p);if(!e){throw new Error("useSyncContext must be used within SyncProvider")}return e};const f=e=>{let t=false;let s=null;async function r(){if(t)return;try{const n=await d("sync-progress",{method:"GET"});const o=n.progress||{};e({status:o.status||"idle",total:o.total||0,processed:o.processed||0,percent:o.percent||0,errors:o.errors||0,type:o.type||"",retrying:o.retrying||false});if(o.status==="canceled"||o.status==="idle"){t=true;e({status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null});return}if(o.status==="running"||o.status==="scheduled"){if(!t){s=setTimeout(r,15e3)}}}catch(e){if(e.name!=="AbortError"&&!t){u("AI Sync","Status polling failed",{message:e.message||"Unknown error",code:e.code})}}}r();return()=>{t=true;if(s){clearTimeout(s);s=null}}};const y=(e,t)=>{let s=false;let r=null;async function n(){if(s)return;try{const o=await d("process-next",{method:"POST"});if(!o.success){if(!s){u("AI Sync","Process next failed",{message:o.message||"Unknown error",status:o.status,code:o.code})}return}if(o.progress){e({status:o.progress.status||"idle",total:o.progress.total||0,processed:o.progress.processed||0,percent:o.progress.percent||0,errors:o.progress.errors||0,retrying:o.progress.retrying||false})}if(o.status==="canceled"||o.status==="idle"||o.progress&&(o.progress.status==="canceled"||o.progress.status==="idle")){s=true;e({status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null});return}if(o.status==="failed"&&o.message){l(o.message);s=true;e({status:"failed",total:o.progress?.total||0,processed:o.progress?.processed||0,percent:o.progress?.percent||0,errors:o.progress?.errors||0,collectionId:null});return}if(o.updated_posts&&o.updated_posts.length>0){const e=o.updated_posts.map((e=>({...e,status:e.status==="error"?"error":"synced",error_message:e.message})));if(t){t(e)}}if(o.status==="running"&&!s){r=setTimeout(n,1e3)}}catch(e){if(e.name!=="AbortError"&&!s){u("AI Sync","Process next error",{message:e.message||"Unknown error",code:e.code,status:e.status});r=setTimeout(n,5e3)}}}n();return()=>{s=true;if(r){clearTimeout(r);r=null}}};const b=(e,t)=>{let s=false;let r=null;async function n(){if(s)return;try{const t=await d("sync-progress",{method:"GET"});const o=t.progress||{};e({status:o.status||"idle",total:o.total||0,processed:o.processed||0,percent:o.percent||0,errors:o.errors||0});if(o.status==="canceled"||o.status==="idle"){s=true;e({status:"idle",total:0,processed:0,percent:0,errors:0,collectionId:null});return}if((o.status==="running"||o.status==="scheduled")&&!s){r=setTimeout(n,3e3)}}catch(e){if(e.name!=="AbortError"&&!s){u("AI Sync","Cron polling error",{message:e.message||"Unknown error",code:e.code,status:e.status})}}}n();return()=>{s=true;if(r){clearTimeout(r);r=null}}};const w=async(e,t,s,r,n,o)=>{const c=e==="direct"?"start-direct-sync":"start-cron-sync";try{const i=await d(c,{method:"POST",data:{selected_post_ids:t,collection_id:s}});if(i.success){r({status:"running",total:i.total||(typeof t==="string"?0:t.length),processed:0,percent:0,errors:0,justStarted:true,collectionId:s});if(e==="direct"){const e=y(r,n);const t=f(r);return()=>{e();t()}}else{return b(r,n)}}else{if(i.error==="job_active"){const e=new Error(i.message||a("A sync job is already running.","echo-knowledge-base"));e.needsConfirmation=true;e.originalError=i.error;throw e}const e=i.error==="no_posts"?"no_posts":"error";if(e==="error"){l(i.message||a("Failed to start sync","echo-knowledge-base"))}o(e,e==="no_posts");return null}}catch(e){if(e.needsConfirmation){throw e}l(e.message||a("Failed to start sync","echo-knowledge-base"));o("error",false);throw e}};window.EPKB_AI_SyncControls=({collectionId:n,selectedPostIds:o=[],disabled:l=false,onPostUpdate:i,hasApiKey:d=true,onSelectAll:u=null,isAllSelected:p=false,selectedRecordsCount:f=0,isFiltered:y=false,onSyncStart:b=null,isSelectAllActive:m=false,activeStatusTab:h="all",trainingData:k=[]})=>{const S=g();const{job:_,setJob:P,setSyncItems:I,setShowSyncTab:$,cancelJob:A,cleanupSync:T,setStopPolling:E}=S;const[v,C]=e(false);const[N,j]=e("basic_timer");const x=s((async()=>{C(true);$(true);P({status:"running",total:typeof o==="string"?0:o.length,processed:0,percent:0,errors:0,justStarted:true,collectionId:n});if(b){b()}const e=e=>{if(i){i(e)}if(S.notifyAllHandlers){S.notifyAllHandlers(e)}};if(typeof o!=="string"){const t=o.map((e=>{const t=k.find((t=>String(t.id)===String(e)||String(t.item_id)===String(e)));if(t){return{id:t.id,item_id:t.item_id,title:t.title,type:t.item_type||t.type||"Article",type_name:t.type_name||t.type||"Article",status:"updating",last_synced:(new Date).toISOString()}}else{console.warn("Training data not found for selected ID:",e);return null}})).filter((e=>e!==null));I(t);e(t)}try{const t=N==="wordpress_cron"?"cron":"direct";const s=await w(t,o,n,P,e,T);if(s){E(s)}else{if(typeof o!=="string"){const t=o.map((e=>({id:e,status:"not_synced",last_synced:null})));e(t)}}}catch(t){if(t.needsConfirmation){const e=confirm(t.message);if(e){await A();await new Promise((e=>setTimeout(e,500)));C(false);x();return}}if(typeof o!=="string"){const t=o.map((e=>({id:e,status:"not_synced",last_synced:null})));e(t)}}finally{C(false)}}),[N,o,n,P,I,$,i,b,S,E,T,k]);const U=_.status==="running"||_.status==="scheduled";const B=!l&&(typeof o==="string"||o.length>0)&&!U&&!v&&d;const H=r(_.status);t((()=>{if(_.status==="running"&&H.current!=="running"&&b){b()}if(_.status==="completed"&&H.current!=="completed"&&b){b()}H.current=_.status}),[_.status,b]);return c("div",{className:"epkb-ai-sync-controls"},!d&&c("div",{className:"epkb-ai-info-message",style:{marginTop:"10px",marginBottom:"10px"}},c("p",{style:{margin:0,color:"#d63638"}},a("API key is required to sync content. Please configure it in General Settings.","echo-knowledge-base"))),c("div",{className:"epkb-ai-form-group"},c("div",{className:"epkb-ai-selected-records-count"},(()=>{const e=()=>{const e={all:"",error:a("Error","echo-knowledge-base"),pending:a("Pending","echo-knowledge-base"),outdated:a("Outdated","echo-knowledge-base"),added:a("Added","echo-knowledge-base"),updated:a("Updated","echo-knowledge-base")};return e[h]||""};const t=e();if(t&&h!=="all"&&f>0){return`${f} ${a("Selected","echo-knowledge-base")} ${t} ${a("Records","echo-knowledge-base")}`}else if(h!=="all"&&f===0){return`${f} ${a("selected records","echo-knowledge-base")}`}else{return`${f} ${a("selected records","echo-knowledge-base")}`}})())),u&&c("div",{className:"epkb-ai-select-all-checkbox"},c("label",null,c("input",{type:"checkbox",checked:p,onChange:e=>u(e.target.checked)}),c("span",null,y?a("Select All Filtered Records","echo-knowledge-base"):a("Select All Records","echo-knowledge-base")))),c("div",{className:"epkb-ai-sync-buttons"},U?c("div",{style:{display:"flex",gap:"10px"}},c("button",{className:"epkb-ai-button epkb-ai-button-primary disabled",disabled:true,style:{cursor:"not-allowed"}},a("Sync in Progress","echo-knowledge-base")),c("button",{className:"epkb-ai-button epkb-ai-button-danger",onClick:A,style:{backgroundColor:"#d63638",borderColor:"#d63638",color:"#fff"}},a("Cancel Sync","echo-knowledge-base"))):c("button",{className:`epkb-ai-button epkb-ai-button-primary ${!B?"disabled":""}`,onClick:x,disabled:!B,title:!d?a("API key required","echo-knowledge-base"):o!=="ALL"&&o.length===0?a("Select at least one item to sync","echo-knowledge-base"):""},a("Start Sync","echo-knowledge-base"))))};window.EPKB_AI_SyncProgressBar=()=>{const{job:s,setJob:r}=g();const[n,o]=e(false);t((()=>{if(s.justStarted){o(true);const e=setTimeout((()=>{o(false);r((e=>({...e,justStarted:false})))}),3e3);return()=>clearTimeout(e)}}),[s.justStarted,r]);t((()=>{if(s.status==="completed"||s.status==="canceled"||s.status==="failed"){}}),[s.status]);if(s.status==="idle")return null;let l="";if(s.status==="running"){if(n){l=a("Sync started successfully! ","echo-knowledge-base")}if(s.total===0){l+=a("Starting sync...","echo-knowledge-base")}else if(s.retrying){l+=`${a("Retrying failed posts:","echo-knowledge-base")} ${s.processed} ${a("of","echo-knowledge-base")} ${s.total}...`}else{l+=`${a("Processing","echo-knowledge-base")} ${s.processed} ${a("of","echo-knowledge-base")} ${s.total} ${a("posts","echo-knowledge-base")}...`}}else if(s.status==="completed"){l=`${a("Completed! Processed","echo-knowledge-base")} ${s.processed} ${a("posts","echo-knowledge-base")}`;if(s.errors>0){l+=` ${a("with","echo-knowledge-base")} ${s.errors} ${a("errors","echo-knowledge-base")}`}}else if(s.status==="failed"){l=`${a("Sync stopped after 5 consecutive errors. Processed","echo-knowledge-base")} ${s.processed} ${a("of","echo-knowledge-base")} ${s.total} ${a("posts with","echo-knowledge-base")} ${s.errors} ${a("total errors","echo-knowledge-base")}`}else if(s.status==="scheduled"){l=a("Sync scheduled, waiting to start...","echo-knowledge-base")}else if(s.status==="canceled"){l=a("Sync canceled","echo-knowledge-base")}return c("div",{className:"epkb-ai-sync-progress"},c("div",{className:"epkb-ai-progress-bar"},c("div",{className:"epkb-ai-progress-fill",style:{width:`${s.percent}%`}}),c("span",{className:"epkb-ai-progress-percentage"},`${s.percent}%`)),l&&c("p",{className:"epkb-ai-progress-message",style:s.status==="failed"?{color:"#d54e21"}:{}},l))};window.EPKB_AI_Sync={startSync:w,pollSyncStatus:f,processDirectSync:y,pollCronSync:b,useSyncContext:g}})();
Save
Cancel