UNPKG

mira-app-server

Version:

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

2 lines (1 loc) 16 kB
import{ad as Ne,am as P,aO as d,ab as w,bB as n,aY as A,aG as j,b5 as e,n as fe,be as _e,aJ as ve,at as ge,a7 as L,aR as we,bf as qe,a8 as ye,bi as Oe,a9 as N,aT as k,aM as Te,b3 as f,aL as je,ae as _,aa as i,a$ as u,aj as l,M as Fe,C as Q,N as Ge,O as Z,ai as m,Q as ee,_ as ae,p as te,q as se,u as x,i as q,aX as O,s as le,E as H,ac as D,t as z,G as ne,H as oe,J as re,K as ue,a1 as He}from"./index-BAS7XAoe.js";import{u as We}from"./usePluginSources-D4fn3gye.js";import{_ as Ke}from"./Textarea.vue_vue_type_script_setup_true_lang-DsmTjQmg.js";import{_ as T}from"./Label.vue_vue_type_script_setup_true_lang-DJnzkt8b.js";import{_ as Re,a as Je,b as Ye,c as de}from"./DropdownMenuTrigger.vue_vue_type_script_setup_true_lang-lUdqzzfB.js";import{k as Xe,M as Qe,L as W,a as ie,K as ce,Y as me,y as Ze,N as ea,H as pe,c as aa}from"./index-CsJj9qiO.js";const[ta]=Ne("MenuGroup");var sa=P({__name:"MenuLabel",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1,default:"div"}},setup(p){const t=p,g=ta({id:""});return(y,h)=>(d(),w(e(fe),j(t,{id:e(g).id||void 0}),{default:n(()=>[A(y.$slots,"default")]),_:3},16,["id"]))}}),la=sa,na=P({__name:"MenuSeparator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(p){const t=p;return(g,y)=>(d(),w(e(fe),j(t,{role:"separator","aria-orientation":"horizontal"}),{default:n(()=>[A(g.$slots,"default")]),_:3},16))}}),oa=na,ra=P({__name:"DropdownMenuLabel",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(p){const t=p;return _e(),(g,y)=>(d(),w(e(la),ve(ge(t)),{default:n(()=>[A(g.$slots,"default")]),_:3},16))}}),ua=ra,da=P({__name:"DropdownMenuSeparator",props:{asChild:{type:Boolean,required:!1},as:{type:null,required:!1}},setup(p){const t=p;return _e(),(g,y)=>(d(),w(e(oa),ve(ge(t)),{default:n(()=>[A(g.$slots,"default")]),_:3},16))}}),ia=da;const $={list:()=>L.get("/cookie-sites"),create:p=>L.post("/cookie-sites",p),update:(p,t)=>L.put(`/cookie-sites/${p}`,t),remove:p=>L.delete(`/cookie-sites/${p}`),setDefault:p=>L.put(`/cookie-sites/${p}/default`)},ca=P({__name:"DropdownMenuLabel",props:{asChild:{type:Boolean},as:{},class:{},inset:{type:Boolean}},setup(p){const t=p,g=we(t,"class","inset"),y=qe(g);return(h,K)=>(d(),w(e(ua),j({"data-slot":"dropdown-menu-label","data-inset":h.inset?"":void 0},e(y),{class:e(ye)("text-muted-foreground px-2 py-1.5 text-xs data-inset:pl-7.5",t.class)}),{default:n(()=>[A(h.$slots,"default")]),_:3},16,["data-inset","class"]))}}),ma=P({__name:"DropdownMenuSeparator",props:{asChild:{type:Boolean},as:{},class:{}},setup(p){const t=p,g=we(t,"class");return(y,h)=>(d(),w(e(ia),j({"data-slot":"dropdown-menu-separator"},e(g),{class:e(ye)("bg-border/50 -mx-1 my-1 h-px",t.class)}),null,16,["class"]))}}),pa={class:"space-y-6"},fa={class:"text-2xl font-bold"},_a={class:"text-sm text-muted-foreground mt-1"},va={key:0,class:"text-sm text-muted-foreground py-8 text-center"},ga={key:1,class:"text-sm text-muted-foreground py-8 text-center"},wa={key:2,class:"space-y-4"},ya={class:"flex items-center gap-2"},xa={class:"font-semibold"},ka=["onClick"],ha=["title","onClick"],ba={class:"flex-1 min-w-0"},$a={class:"flex items-center gap-2 flex-wrap"},Ca={key:0,class:"text-sm font-medium"},Sa={class:"text-xs text-muted-foreground"},Da={key:0,class:"text-xs text-muted-foreground mt-0.5 truncate"},Pa={class:"flex items-center gap-1 shrink-0"},za={class:"flex flex-col gap-2 sm:flex-row"},Ma={key:0,class:"space-y-2"},Va=["title","onClick"],La={class:"min-w-0 flex-1"},Aa={class:"flex items-center gap-2"},Ba={class:"text-sm font-medium truncate"},Ea={class:"text-xs text-muted-foreground truncate"},Ua={key:1,class:"text-sm text-muted-foreground py-6 text-center"},Ia={class:"space-y-4 py-2"},Na={class:"space-y-2"},qa={class:"space-y-2"},Oa={class:"space-y-2"},Ta={key:0,class:"text-xs text-yellow-600 dark:text-yellow-400"},ja={class:"space-y-2"},Fa={key:0,class:"font-medium text-foreground"},Ga={class:"py-2"},Xa=P({__name:"index",setup(p){const{t}=Oe(),g=N(()=>typeof navigator<"u"&&/Electron/i.test(navigator.userAgent)),y=k([]),h=k(!1),K=[{name:"Pinterest",url:"https://www.pinterest.com"},{name:"Pixiv",url:"https://www.pixiv.net"},{name:"X / Twitter",url:"https://x.com"},{name:"Danbooru",url:"https://danbooru.donmai.us"}];async function C(){var o;h.value=!0;try{const a=await $.list();y.value=((o=a.data)==null?void 0:o.data)||[]}catch{f.error(t("settings.download.loadFailed"))}finally{h.value=!1}}function R(o){return(o||"").replace(/\/$/,"").toLowerCase()}const F=N(()=>{const o=new Map;for(const a of y.value){const s=R(a.url);o.has(s)||o.set(s,{key:s,url:a.url,name:a.name,groups:[]}),o.get(s).groups.push(a)}for(const a of o.values())a.groups.sort((s,r)=>Number(r.isDefault)-Number(s.isDefault));return Array.from(o.values())});async function xe(o){var a,s;try{await $.create({name:o.name,url:o.url}),f.success(t("settings.download.added")),await C()}catch(r){f.error(((s=(a=r.response)==null?void 0:a.data)==null?void 0:s.message)||t("common.failed"))}}const ke=N(()=>new Set(F.value.map(o=>o.key))),M=k(!1),c=k({name:"",url:"",remark:"",label:""}),V=k(null),he=N(()=>!!c.value.url&&ke.value.has(R(c.value.url))&&V.value==null);function be(o){V.value=null,c.value={name:"",url:"",remark:"",label:""},M.value=!0}function $e(o){V.value=o.id,c.value={name:o.name,url:o.url,remark:o.remark||"",label:o.label||""},M.value=!0}async function Ce(){var o,a;if(!c.value.name||!c.value.url){f.error(t("common.failed"));return}try{V.value!=null?await $.update(V.value,{name:c.value.name,url:c.value.url,remark:c.value.remark,label:c.value.label}):await $.create({name:c.value.name,url:c.value.url,remark:c.value.remark,label:c.value.label}),f.success(t("settings.download.saveOk")),M.value=!1,await C()}catch(s){f.error(((a=(o=s.response)==null?void 0:o.data)==null?void 0:a.message)||t("common.failed"))}}async function Se(o){var a,s;if(confirm(t("settings.download.deleteConfirm")))try{await $.remove(o.id),await C()}catch(r){f.error(((s=(a=r.response)==null?void 0:a.data)==null?void 0:s.message)||t("common.failed"))}}async function De(o){var a,s;try{await $.setDefault(o.id),await C()}catch(r){f.error(((s=(a=r.response)==null?void 0:a.data)==null?void 0:s.message)||t("common.failed"))}}function Pe(o){var a;if(!g.value||!((a=window.electronAPI)!=null&&a.openLoginWindow)){f.info(t("settings.download.webEnvHint"));return}window.electronAPI.openLoginWindow(o.id,o.url),f.info(t("settings.download.loginWindowHint"))}let B=null;Te(async()=>{var o;await C(),(o=window.electronAPI)!=null&&o.onLoginCookies&&(B=window.electronAPI.onLoginCookies(async({siteId:a,cookies:s})=>{var r,v;try{await $.update(a,{cookies:s}),f.success(t("settings.download.saveOk")),await C()}catch(I){f.error(((v=(r=I.response)==null?void 0:r.data)==null?void 0:v.message)||t("common.failed"))}}))}),je(()=>{B==null||B()});const E=k(!1),b=k(null),U=k("");function ze(o){b.value=o,U.value="",E.value=!0}function Me(o){const a=o.trim();if(!a)return[];if(a.startsWith("["))try{const r=JSON.parse(a);if(Array.isArray(r))return r.map(v=>({name:String(v.name),value:String(v.value),domain:v.domain,path:v.path}))}catch{}const s=[];for(const r of a.split(/[;\n]/)){const v=r.indexOf("=");if(v<=0)continue;const I=r.slice(0,v).trim(),Ie=r.slice(v+1).trim();I&&s.push({name:I,value:Ie})}return s}async function Ve(){var a,s;if(!b.value)return;const o=Me(U.value);if(o==null){f.error(t("common.failed"));return}try{await $.update(b.value.id,{cookies:o}),f.success(t("settings.download.saveOk")),E.value=!1,await C()}catch(r){f.error(((s=(a=r.response)==null?void 0:a.data)==null?void 0:s.message)||t("common.failed"))}}function J(o){window.open(o,"_blank","noopener")}function Y(o){var a;return((a=o.cookies)==null?void 0:a.length)||0}const{sources:X,activeId:G,addSource:Le,removeSource:Ae,setActive:Be}=We(),S=k({name:"",url:""});function Ee(){const o=S.value.url.trim();if(!o){f.error("请填写插件源 URL");return}Le(S.value.name,o),S.value={name:"",url:""},f.success("已添加插件源")}function Ue(o){confirm("确定删除该插件源?")&&Ae(o)}return(o,a)=>(d(),_("div",pa,[i("div",null,[i("h1",fa,u(e(t)("settings.title")),1),i("p",_a,u(e(t)("settings.download.subtitle")),1)]),l(e(Fe),{"default-value":"download"},{default:n(()=>[l(e(Ge),null,{default:n(()=>[l(e(Z),{value:"download"},{default:n(()=>[l(e(Xe),{class:"size-4 mr-1.5"}),m(" "+u(e(t)("settings.tabs.download")),1)]),_:1}),l(e(Z),{value:"plugin"},{default:n(()=>[l(e(Qe),{class:"size-4 mr-1.5"}),a[11]||(a[11]=m(" 插件 "))]),_:1})]),_:1}),l(e(ee),{value:"download",class:"space-y-6 mt-4"},{default:n(()=>[l(e(ae),null,{default:n(()=>[l(e(te),{class:"flex-row items-center justify-between space-y-0"},{default:n(()=>[l(e(se),{class:"text-base"},{default:n(()=>[m(u(e(t)("settings.download.addSite")),1)]),_:1}),l(e(Re),null,{default:n(()=>[l(e(Je),{"as-child":""},{default:n(()=>[l(e(x),{size:"sm"},{default:n(()=>[l(e(W),{class:"size-4 mr-1"}),m(" "+u(e(t)("settings.download.addSite")),1)]),_:1})]),_:1}),l(e(Ye),{align:"end",class:"w-52"},{default:n(()=>[l(e(ca),null,{default:n(()=>[m(u(e(t)("settings.download.presetSites")),1)]),_:1}),(d(),_(q,null,O(K,s=>l(e(de),{key:s.url,onClick:r=>xe(s)},{default:n(()=>[l(e(W),{class:"size-4 mr-2"}),m(" "+u(s.name),1)]),_:2},1032,["onClick"])),64)),l(e(ma)),l(e(de),{onClick:a[0]||(a[0]=s=>be())},{default:n(()=>[l(e(ie),{class:"size-4 mr-2"}),m(" "+u(e(t)("settings.download.customSite")),1)]),_:1})]),_:1})]),_:1})]),_:1}),l(e(le),null,{default:n(()=>[h.value?(d(),_("div",va,u(e(t)("common.loading")),1)):F.value.length===0?(d(),_("div",ga,u(e(t)("common.noData")),1)):(d(),_("div",wa,[(d(!0),_(q,null,O(F.value,s=>(d(),_("div",{key:s.key,class:"rounded-xl border p-4 space-y-3"},[i("div",ya,[i("span",xa,u(s.name),1),l(e(H),{variant:"secondary"},{default:n(()=>[m(u(e(t)("settings.download.groupCount",{n:s.groups.length})),1)]),_:2},1024),i("a",{class:"text-xs text-muted-foreground hover:text-primary truncate cursor-pointer",onClick:r=>J(s.url)},u(s.url),9,ka)]),(d(!0),_(q,null,O(s.groups,r=>(d(),_("div",{key:r.id,class:"flex items-center gap-3 rounded-lg bg-muted/40 p-2.5"},[i("button",{class:"shrink-0",title:r.isDefault?e(t)("settings.download.isDefault"):e(t)("settings.download.setDefault"),onClick:v=>De(r)},[r.isDefault?(d(),w(e(ce),{key:0,class:"size-4 text-yellow-500"})):(d(),w(e(me),{key:1,class:"size-4 text-muted-foreground hover:text-yellow-500"}))],8,ha),i("div",ba,[i("div",$a,[r.label?(d(),_("span",Ca,u(r.label),1)):D("",!0),r.isDefault?(d(),w(e(H),{key:1,variant:"default"},{default:n(()=>[m(u(e(t)("settings.download.isDefault")),1)]),_:1})):D("",!0),i("span",Sa,u(Y(r)>0?e(t)("settings.download.cookieCount",{n:Y(r)}):e(t)("settings.download.cookieEmpty")),1)]),r.remark?(d(),_("div",Da,u(r.remark),1)):D("",!0)]),i("div",Pa,[g.value?(d(),w(e(x),{key:0,variant:"ghost",size:"sm",title:e(t)("settings.download.loginGetCookie"),onClick:v=>Pe(r)},{default:n(()=>[l(e(Ze),{class:"size-4"})]),_:2},1032,["title","onClick"])):D("",!0),l(e(x),{variant:"ghost",size:"sm",title:e(t)("settings.download.manualInput"),onClick:v=>ze(r)},{default:n(()=>[l(e(ea),{class:"size-4"})]),_:2},1032,["title","onClick"]),l(e(x),{variant:"ghost",size:"icon",title:e(t)("settings.download.edit"),onClick:v=>$e(r)},{default:n(()=>[l(e(ie),{class:"size-4"})]),_:2},1032,["title","onClick"]),l(e(x),{variant:"ghost",size:"icon",title:e(t)("settings.download.delete"),onClick:v=>Se(r)},{default:n(()=>[l(e(pe),{class:"size-4 text-destructive"})]),_:2},1032,["title","onClick"])])]))),128))]))),128))]))]),_:1})]),_:1})]),_:1}),l(e(ee),{value:"plugin",class:"space-y-6 mt-4"},{default:n(()=>[l(e(ae),null,{default:n(()=>[l(e(te),{class:"flex-row items-center justify-between space-y-0"},{default:n(()=>[l(e(se),{class:"text-base"},{default:n(()=>a[12]||(a[12]=[m("插件源")])),_:1})]),_:1}),l(e(le),{class:"space-y-4"},{default:n(()=>[i("div",za,[l(e(z),{modelValue:S.value.name,"onUpdate:modelValue":a[1]||(a[1]=s=>S.value.name=s),placeholder:"源名称(可选)",class:"sm:flex-1"},null,8,["modelValue"]),l(e(z),{modelValue:S.value.url,"onUpdate:modelValue":a[2]||(a[2]=s=>S.value.url=s),placeholder:"https://.../plugins.recommend.json",class:"sm:flex-[2]"},null,8,["modelValue"]),l(e(x),{onClick:Ee},{default:n(()=>[l(e(W),{class:"size-4 mr-1"}),a[13]||(a[13]=m(" 添加 "))]),_:1})]),e(X).length?(d(),_("div",Ma,[(d(!0),_(q,null,O(e(X),s=>(d(),_("div",{key:s.id,class:"flex items-center gap-3 rounded-lg bg-muted/40 p-2.5"},[i("button",{class:"shrink-0",title:s.id===e(G)?"当前应用":"设为当前应用",onClick:r=>e(Be)(s.id)},[s.id===e(G)?(d(),w(e(ce),{key:0,class:"size-4 text-yellow-500"})):(d(),w(e(me),{key:1,class:"size-4 text-muted-foreground hover:text-yellow-500"}))],8,Va),i("div",La,[i("div",Aa,[i("span",Ba,u(s.name),1),s.id===e(G)?(d(),w(e(H),{key:0,variant:"default",class:"text-[10px]"},{default:n(()=>a[14]||(a[14]=[m("当前")])),_:1})):D("",!0)]),i("div",Ea,u(s.url),1)]),l(e(x),{variant:"ghost",size:"icon",title:"删除",onClick:r=>Ue(s.id)},{default:n(()=>[l(e(pe),{class:"size-4 text-destructive"})]),_:2},1032,["onClick"])]))),128))])):(d(),_("div",Ua,"暂无插件源,请添加")),a[15]||(a[15]=i("p",{class:"text-xs text-muted-foreground"}," 星标选中的源将用于「插件」页的插件商店,插件商店中无需再填写地址。 ",-1))]),_:1})]),_:1})]),_:1})]),_:1}),l(e(Q),{open:M.value,"onUpdate:open":a[7]||(a[7]=s=>M.value=s)},{default:n(()=>[l(e(ne),{class:"max-w-md"},{default:n(()=>[l(e(oe),null,{default:n(()=>[l(e(re),null,{default:n(()=>[m(u(e(t)("settings.download.addDialog.title")),1)]),_:1})]),_:1}),i("div",Ia,[i("div",Na,[l(e(T),null,{default:n(()=>[m(u(e(t)("settings.download.addDialog.name")),1)]),_:1}),l(e(z),{modelValue:c.value.name,"onUpdate:modelValue":a[3]||(a[3]=s=>c.value.name=s),placeholder:e(t)("settings.download.addDialog.namePlaceholder")},null,8,["modelValue","placeholder"])]),i("div",qa,[l(e(T),null,{default:n(()=>[m(u(e(t)("settings.download.addDialog.url")),1)]),_:1}),l(e(z),{modelValue:c.value.url,"onUpdate:modelValue":a[4]||(a[4]=s=>c.value.url=s),placeholder:e(t)("settings.download.addDialog.urlPlaceholder")},null,8,["modelValue","placeholder"])]),i("div",Oa,[l(e(T),null,{default:n(()=>[m(u(e(t)("settings.download.label")),1)]),_:1}),l(e(z),{modelValue:c.value.label,"onUpdate:modelValue":a[5]||(a[5]=s=>c.value.label=s),placeholder:e(t)("settings.download.labelPlaceholder")},null,8,["modelValue","placeholder"])]),he.value?(d(),_("p",Ta,u(e(t)("settings.download.newGroupHint")),1)):D("",!0),i("div",ja,[l(e(T),null,{default:n(()=>[m(u(e(t)("settings.download.addDialog.remark")),1)]),_:1}),l(e(z),{modelValue:c.value.remark,"onUpdate:modelValue":a[6]||(a[6]=s=>c.value.remark=s),placeholder:e(t)("settings.download.addDialog.remarkPlaceholder")},null,8,["modelValue","placeholder"])])]),l(e(ue),null,{default:n(()=>[l(e(x),{onClick:Ce},{default:n(()=>[m(u(e(t)("common.save")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["open"]),l(e(Q),{open:E.value,"onUpdate:open":a[10]||(a[10]=s=>E.value=s)},{default:n(()=>[l(e(ne),{class:"max-w-lg"},{default:n(()=>[l(e(oe),null,{default:n(()=>[l(e(re),null,{default:n(()=>[m(u(e(t)("settings.download.manualDialog.title")),1)]),_:1}),l(e(He),null,{default:n(()=>[m(u(e(t)("settings.download.manualDialog.desc"))+" ",1),b.value?(d(),_("span",Fa,u(b.value.name)+u(b.value.label?" / "+b.value.label:""),1)):D("",!0)]),_:1})]),_:1}),i("div",Ga,[l(e(Ke),{modelValue:U.value,"onUpdate:modelValue":a[8]||(a[8]=s=>U.value=s),placeholder:e(t)("settings.download.manualDialog.placeholder"),rows:"8",class:"font-mono text-xs"},null,8,["modelValue","placeholder"])]),l(e(ue),null,{default:n(()=>[l(e(x),{variant:"outline",class:"mr-auto",onClick:a[9]||(a[9]=s=>{var r;return J(((r=b.value)==null?void 0:r.url)||"")})},{default:n(()=>[l(e(aa),{class:"size-4 mr-1"}),m(" "+u(e(t)("settings.download.addDialog.url")),1)]),_:1}),l(e(x),{onClick:Ve},{default:n(()=>[m(u(e(t)("settings.download.manualDialog.save")),1)]),_:1})]),_:1})]),_:1})]),_:1},8,["open"])]))}});export{Xa as default};