UNPKG

mira-app-server

Version:

Mira Server - standalone server application using mira-app-core

2 lines (1 loc) 11.8 kB
import{a7 as S,am as R,bi as N,aT as $,a9 as V,aM as D,aL as E,ab as B,bB as r,b5 as e,_ as U,aj as u,aa as t,q as A,ai as g,a$ as a,r as K,u as L,ae as f,ac as T,E as Y,i as Z,aX as ee,p as O,aK as X,s as G,aO as v}from"./index-BAS7XAoe.js";import{u as H}from"./useLibrary-lubOK0Bg.js";import{_ as te,a as ae,b as se}from"./PopoverTrigger.vue_vue_type_script_setup_true_lang-DS2w7cXI.js";const y={scan:m=>S.get("/thumb/scan",{params:{libraryId:m}}),progress:m=>S.get("/thumb/progress",{params:{libraryId:m}}),cancel:()=>S.get("/thumb/cancel"),stats:m=>S.get("/thumb/stats",{params:{libraryId:m}}),generators:()=>S.get("/thumb/generators"),sync:m=>S.get("/thumb/sync",{params:{libraryId:m}}),metadataStats:m=>S.get("/thumb/metadata/stats",{params:{libraryId:m}}),metadataScan:m=>S.get("/thumb/metadata/scan",{params:{libraryId:m}}),metadataProgress:m=>S.get("/thumb/metadata/progress",{params:{libraryId:m}})},ne={class:"flex flex-wrap items-center gap-2"},le={key:0,class:"mr-1 size-3 animate-spin rounded-full border-2 border-current border-t-transparent"},oe={key:0,class:"mr-1 size-3 animate-spin rounded-full border-2 border-current border-t-transparent"},ie={key:0,class:"mr-1 size-3 animate-spin rounded-full border-2 border-current border-t-transparent"},re={class:"flex items-center justify-between border-b px-3 py-2"},de={class:"text-sm font-medium"},ue={class:"h-72 overflow-y-auto p-3"},ce={key:0,class:"space-y-1.5 font-mono text-xs"},me={class:"shrink-0 text-muted-foreground"},ve={key:1,class:"py-10 text-center text-sm text-muted-foreground"},_e={class:"grid grid-cols-2 gap-3 sm:grid-cols-4"},fe={class:"rounded-md border p-3"},he={class:"text-xl font-semibold"},ge={class:"mt-0.5 text-xs text-muted-foreground"},be={class:"rounded-md border p-3"},pe={class:"flex items-baseline gap-1"},xe={class:"text-xl font-semibold"},ye={class:"text-xs text-muted-foreground"},$e={class:"mt-0.5 text-xs text-muted-foreground"},we={class:"rounded-md border p-3"},ke={class:"text-xl font-semibold"},Pe={class:"mt-0.5 text-xs text-muted-foreground"},Se={class:"rounded-md border p-3"},Te={class:"text-xl font-semibold"},Le={class:"mt-0.5 text-xs text-muted-foreground"},Me={key:0,class:"space-y-2"},ze={class:"flex items-center justify-between text-sm"},Ce={class:"text-muted-foreground"},Fe={class:"font-semibold"},Ie={class:"h-2.5 overflow-hidden rounded-full bg-secondary"},qe=R({__name:"ThumbnailCard",setup(m){const{t:s}=N(),{selectedId:o}=H(),x=$(!1),h=$(!1),c=$(!1),d=$({totalFiles:0,withThumbnails:0,withoutThumbnails:0,thumbnailRate:0}),l=$({totalPending:0,queueLength:0,processing:!1,completed:0,progress:0}),b=$([]);let w=null;const C=V(()=>l.value.totalPending>0||l.value.processing);function _(i){b.value.unshift({time:new Date().toLocaleTimeString(),message:i}),b.value.length>50&&(b.value=b.value.slice(0,50))}async function F(){var i;if(o.value)try{const n=await y.progress(o.value);if(!((i=n.data)!=null&&i.success))return;l.value=n.data.data,(l.value.processing||l.value.queueLength>0)&&(c.value=!0,q())}catch{}}async function M(){var i;if(o.value){x.value=!0;try{const n=await y.stats(o.value);(i=n.data)!=null&&i.success&&(d.value=n.data.data,_(`${s("thumbnail.statsUpdated")}:${s("thumbnail.totalFiles")} ${d.value.totalFiles},${s("thumbnail.rate")} ${d.value.thumbnailRate}%`))}catch(n){_(`${s("thumbnail.statsFailed")}:${n.message}`)}finally{x.value=!1}}}async function k(){var i;if(o.value)try{const n=await y.scan(o.value);(i=n.data)!=null&&i.success&&(c.value=!0,_(n.data.message||s("thumbnail.scanStarted")),q())}catch(n){_(`${s("thumbnail.scanFailed")}:${n.message}`)}}async function p(){var i;try{const n=await y.cancel();(i=n.data)!=null&&i.success&&(c.value=!1,z(),_(n.data.message||s("thumbnail.scanCancelled")))}catch(n){_(`${s("thumbnail.cancelFailed")}:${n.message}`)}}async function J(){var i;if(o.value){h.value=!0;try{(i=(await y.sync(o.value)).data)!=null&&i.success&&(_(s("thumbnail.syncStarted")),Q())}catch(n){_(`${s("thumbnail.syncFailed")}:${n.message}`),h.value=!1}}}let I=-1;function Q(){I=-1,q(),z(),w=setInterval(async()=>{var i;try{const n=await y.progress(o.value);if(!((i=n.data)!=null&&i.success))return;l.value=n.data.data;const P=l.value.progress;if(P<100&&P-I>=25&&(I=P,_(`${s("thumbnail.syncProgress")}:${l.value.completed} / ${l.value.totalPending} (${P}%)`)),!l.value.processing&&l.value.queueLength===0){z();const{total:j,synced:W}={total:l.value.totalPending,synced:l.value.completed};_(s("thumbnail.syncResult",{total:j,synced:W})),h.value=!1,setTimeout(()=>M(),1e3)}}catch{}},1e3)}function q(){z(),w=setInterval(async()=>{var i;try{const n=await y.progress(o.value);if(!((i=n.data)!=null&&i.success))return;l.value=n.data.data,!l.value.processing&&l.value.queueLength===0&&(c.value=!1,z(),l.value.progress===100&&(_(s("thumbnail.scanComplete")),setTimeout(()=>M(),1e3)))}catch{}},1e3)}function z(){w&&(clearInterval(w),w=null)}return D(async()=>{await M(),F()}),E(z),(i,n)=>(v(),B(e(U),null,{default:r(()=>[u(e(O),{class:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between"},{default:r(()=>[t("div",null,[u(e(A),null,{default:r(()=>[g(a(e(s)("thumbnail.title")),1)]),_:1}),u(e(K),null,{default:r(()=>[g(a(e(s)("thumbnail.subtitle")),1)]),_:1})]),t("div",ne,[u(e(L),{size:"sm",variant:"outline",disabled:!e(o)||x.value,onClick:M},{default:r(()=>[x.value?(v(),f("span",le)):T("",!0),g(" "+a(e(s)("common.refresh")),1)]),_:1},8,["disabled"]),u(e(L),{size:"sm",variant:c.value?"destructive":"default",disabled:!e(o),onClick:n[0]||(n[0]=P=>c.value?p():k())},{default:r(()=>[c.value?(v(),f("span",oe)):T("",!0),g(" "+a(c.value?e(s)("thumbnail.cancelScan"):e(s)("thumbnail.startScan")),1)]),_:1},8,["variant","disabled"]),u(e(L),{size:"sm",variant:"outline",disabled:!e(o)||h.value,onClick:J},{default:r(()=>[h.value?(v(),f("span",ie)):T("",!0),g(" "+a(e(s)("thumbnail.syncThumbs")),1)]),_:1},8,["disabled"]),u(e(te),null,{default:r(()=>[u(e(ae),{"as-child":""},{default:r(()=>[u(e(L),{size:"sm",variant:"ghost"},{default:r(()=>[g(a(e(s)("thumbnail.logs"))+" ",1),b.value.length?(v(),B(e(Y),{key:0,variant:"secondary",class:"ml-1.5 h-5 px-1.5 text-xs"},{default:r(()=>[g(a(b.value.length),1)]),_:1})):T("",!0)]),_:1})]),_:1}),u(e(se),{class:"w-96 p-0",align:"end"},{default:r(()=>[t("div",re,[t("span",de,a(e(s)("thumbnail.logs")),1),u(e(L),{size:"sm",variant:"ghost",class:"h-7 px-2 text-xs",onClick:n[1]||(n[1]=P=>b.value=[])},{default:r(()=>[g(a(e(s)("thumbnail.clearLogs")),1)]),_:1})]),t("div",ue,[b.value.length?(v(),f("div",ce,[(v(!0),f(Z,null,ee(b.value,(P,j)=>(v(),f("div",{key:j,class:"flex gap-2"},[t("span",me,"["+a(P.time)+"]",1),t("span",null,a(P.message),1)]))),128))])):(v(),f("div",ve,a(e(s)("thumbnail.noLogs")),1))])]),_:1})]),_:1})])]),_:1}),u(e(G),{class:"space-y-4"},{default:r(()=>[t("div",_e,[t("div",fe,[t("div",he,a(d.value.totalFiles),1),t("div",ge,a(e(s)("thumbnail.totalFiles")),1)]),t("div",be,[t("div",pe,[t("span",xe,a(d.value.withThumbnails),1),t("span",ye,a(d.value.thumbnailRate)+"%",1)]),t("div",$e,a(e(s)("thumbnail.withThumbnails")),1)]),t("div",we,[t("div",ke,a(d.value.withoutThumbnails),1),t("div",Pe,a(e(s)("thumbnail.withoutThumbnails")),1)]),t("div",Se,[t("div",Te,a(l.value.queueLength||d.value.withoutThumbnails),1),t("div",Le,a(e(s)("thumbnail.remainingTasks")),1)])]),C.value?(v(),f("div",Me,[t("div",ze,[t("span",Ce,a(e(s)("thumbnail.completed"))+" "+a(l.value.completed)+" / "+a(l.value.totalPending),1),t("span",Fe,a(l.value.progress)+"%",1)]),t("div",Ie,[t("div",{class:"h-full rounded-full bg-primary transition-all duration-500",style:X({width:l.value.progress+"%"})},null,4)])])):T("",!0)]),_:1})]),_:1}))}}),je={class:"flex flex-wrap items-center gap-2"},Be={key:0,class:"mr-1 size-3 animate-spin rounded-full border-2 border-current border-t-transparent"},Re={key:0,class:"mr-1 size-3 animate-spin rounded-full border-2 border-current border-t-transparent"},Ne={key:0,class:"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive"},Ve={class:"grid grid-cols-2 gap-3 sm:grid-cols-4"},De={class:"rounded-md border p-3"},Ee={class:"text-xl font-semibold"},Ue={class:"mt-0.5 text-xs text-muted-foreground"},Ae={class:"rounded-md border p-3"},Ke={class:"flex items-baseline gap-1"},Oe={class:"text-xl font-semibold"},Xe={class:"text-xs text-muted-foreground"},Ge={class:"mt-0.5 text-xs text-muted-foreground"},He={class:"rounded-md border p-3"},Je={class:"text-xl font-semibold"},Qe={class:"mt-0.5 text-xs text-muted-foreground"},We={class:"rounded-md border p-3"},Ye={class:"text-xl font-semibold"},Ze={class:"mt-0.5 text-xs text-muted-foreground"},et={key:1,class:"space-y-2"},tt={class:"flex items-center justify-between text-sm"},at={class:"text-muted-foreground"},st={class:"font-semibold"},nt={class:"h-2.5 overflow-hidden rounded-full bg-secondary"},lt=R({__name:"MetadataCard",setup(m){const{t:s}=N(),{selectedId:o}=H(),x=$(!1),h=$(!1),c=$({available:!0,totalFiles:0,withMetadata:0,withoutMetadata:0,metadataRate:0}),d=$({totalPending:0,completed:0,queueLength:0,processing:!1,progress:0});let l=null;const b=V(()=>d.value.totalPending>0||d.value.processing);async function w(){var k;if(o.value){x.value=!0;try{const p=await y.metadataStats(o.value);(k=p.data)!=null&&k.success&&(c.value=p.data.data)}finally{x.value=!1}}}async function C(){var k;if(o.value)try{const p=await y.metadataProgress(o.value);if(!((k=p.data)!=null&&k.success))return;d.value=p.data.data,h.value=d.value.processing||d.value.queueLength>0,h.value||(F(),d.value.totalPending>0&&await w())}catch{}}function _(){F(),l=setInterval(C,1e3)}function F(){l&&clearInterval(l),l=null}async function M(){var p;if(!o.value)return;(p=(await y.metadataScan(o.value)).data)!=null&&p.success?(h.value=!0,_(),await C()):c.value.available=!1}return D(async()=>{await w(),await C()}),E(F),(k,p)=>(v(),B(e(U),null,{default:r(()=>[u(e(O),{class:"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between"},{default:r(()=>[t("div",null,[u(e(A),null,{default:r(()=>[g(a(e(s)("metadata.title")),1)]),_:1}),u(e(K),null,{default:r(()=>[g(a(e(s)("metadata.subtitle")),1)]),_:1})]),t("div",je,[u(e(L),{size:"sm",variant:"outline",disabled:!e(o)||x.value,onClick:w},{default:r(()=>[x.value?(v(),f("span",Be)):T("",!0),g(" "+a(e(s)("common.refresh")),1)]),_:1},8,["disabled"]),u(e(L),{size:"sm",disabled:!e(o)||h.value||!c.value.available,onClick:M},{default:r(()=>[h.value?(v(),f("span",Re)):T("",!0),g(" "+a(h.value?e(s)("metadata.scanning"):e(s)("metadata.startScan")),1)]),_:1},8,["disabled"])])]),_:1}),u(e(G),{class:"space-y-4"},{default:r(()=>[c.value.available?T("",!0):(v(),f("div",Ne,a(e(s)("metadata.unavailable")),1)),t("div",Ve,[t("div",De,[t("div",Ee,a(c.value.totalFiles),1),t("div",Ue,a(e(s)("metadata.totalFiles")),1)]),t("div",Ae,[t("div",Ke,[t("span",Oe,a(c.value.withMetadata),1),t("span",Xe,a(c.value.metadataRate)+"%",1)]),t("div",Ge,a(e(s)("metadata.withMetadata")),1)]),t("div",He,[t("div",Je,a(c.value.withoutMetadata),1),t("div",Qe,a(e(s)("metadata.withoutMetadata")),1)]),t("div",We,[t("div",Ye,a(d.value.queueLength||c.value.withoutMetadata),1),t("div",Ze,a(e(s)("metadata.remainingTasks")),1)])]),b.value?(v(),f("div",et,[t("div",tt,[t("span",at,a(e(s)("metadata.completed"))+" "+a(d.value.completed)+" / "+a(d.value.totalPending),1),t("span",st,a(d.value.progress)+"%",1)]),t("div",nt,[t("div",{class:"h-full rounded-full bg-primary transition-all duration-500",style:X({width:d.value.progress+"%"})},null,4)])])):T("",!0)]),_:1})]),_:1}))}}),ot={class:"space-y-6"},it={class:"text-2xl font-bold tracking-normal"},rt={class:"mt-1 text-sm text-muted-foreground"},mt=R({__name:"index",setup(m){const{t:s}=N();return(o,x)=>(v(),f("div",ot,[t("div",null,[t("h1",it,a(e(s)("media.title")),1),t("p",rt,a(e(s)("media.subtitle")),1)]),u(qe),u(lt)]))}});export{mt as default};