Hide unnecessary features based on server type

pull/307/head
zanllp 2023-07-12 05:20:38 +08:00
parent 275b4850af
commit 195b701ccf
36 changed files with 74 additions and 59 deletions

17
app.py
View File

@ -93,9 +93,9 @@ class AppUtils:
update_image_index: bool = False, update_image_index: bool = False,
extra_paths: List[str] = [], extra_paths: List[str] = [],
sd_webui_path_relative_to_config=False, sd_webui_path_relative_to_config=False,
allow_cors = False, allow_cors=False,
enable_shutdown = False, enable_shutdown=False,
sd_webui_dir: Optional[str] = None sd_webui_dir: Optional[str] = None,
): ):
""" """
Parameter definitions can be found by running the `python app.py -h `command or by examining the setup_parser() function. Parameter definitions can be found by running the `python app.py -h `command or by examining the setup_parser() function.
@ -108,8 +108,10 @@ class AppUtils:
self.enable_shutdown = enable_shutdown self.enable_shutdown = enable_shutdown
self.sd_webui_dir = sd_webui_dir self.sd_webui_dir = sd_webui_dir
if sd_webui_dir: if sd_webui_dir:
DataBase.path = os.path.join(sd_webui_dir, 'extensions/sd-webui-infinite-image-browsing/iib.db') DataBase.path = os.path.join(
self.sd_webui_config = os.path.join(sd_webui_dir, 'config.json') sd_webui_dir, "extensions/sd-webui-infinite-image-browsing/iib.db"
)
self.sd_webui_config = os.path.join(sd_webui_dir, "config.json")
self.sd_webui_path_relative_to_config = True self.sd_webui_path_relative_to_config = True
def set_params(self, *args, **kwargs) -> None: def set_params(self, *args, **kwargs) -> None:
@ -149,7 +151,8 @@ class AppUtils:
extra_paths_cli=normalize_paths(extra_paths), extra_paths_cli=normalize_paths(extra_paths),
sd_webui_path_relative_to_config=self.sd_webui_path_relative_to_config, sd_webui_path_relative_to_config=self.sd_webui_path_relative_to_config,
allow_cors=self.allow_cors, allow_cors=self.allow_cors,
enable_shutdown=self.enable_shutdown enable_shutdown=self.enable_shutdown,
launch_mode="server",
) )
def get_root_browser_app(self) -> FastAPI: def get_root_browser_app(self) -> FastAPI:
@ -200,7 +203,7 @@ def setup_parser() -> argparse.ArgumentParser:
"--enable_shutdown", "--enable_shutdown",
action="store_true", action="store_true",
help="Enable the shutdown endpoint.", help="Enable the shutdown endpoint.",
) )
parser.add_argument( parser.add_argument(
"--sd_webui_dir", "--sd_webui_dir",
type=str, type=str,

View File

@ -15,7 +15,7 @@
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Infinite Image Browsing</title> <title>Infinite Image Browsing</title>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-0ff6a040.js"></script> <script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-2ba197f6.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-4ed7d1e3.css"> <link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-4ed7d1e3.css">
</head> </head>

View File

@ -173,6 +173,7 @@ def infinite_image_browsing_api(app: FastAPI, **kwargs):
"all_custom_tags": all_custom_tags, "all_custom_tags": all_custom_tags,
"extra_paths": extra_paths, "extra_paths": extra_paths,
"enable_access_control": enable_access_control, "enable_access_control": enable_access_control,
"launch_mode": kwargs.get("launch_mode", "sd"),
} }
class DeleteFilesReq(BaseModel): class DeleteFilesReq(BaseModel):
@ -229,7 +230,7 @@ def infinite_image_browsing_api(app: FastAPI, **kwargs):
else f"目标文件夹 {req.dest} 不存在。" else f"目标文件夹 {req.dest} 不存在。"
) )
raise HTTPException(400, detail=error_msg) raise HTTPException(400, detail=error_msg)
conn = DataBase.get_conn() conn = DataBase.get_conn()
for path in req.file_paths: for path in req.file_paths:
check_path_trust(path) check_path_trust(path)
@ -417,12 +418,10 @@ def infinite_image_browsing_api(app: FastAPI, **kwargs):
raise HTTPException(status_code=403) raise HTTPException(status_code=403)
open_folder(*os.path.split(req.path)) open_folder(*os.path.split(req.path))
@app.post(pre + "/shutdown") @app.post(pre + "/shutdown")
async def shutdown_app(): async def shutdown_app():
# This API endpoint is mainly used as a sidecar in Tauri applications to shut down the application # This API endpoint is mainly used as a sidecar in Tauri applications to shut down the application
if not kwargs.get('enable_shutdown'): if not kwargs.get("enable_shutdown"):
raise HTTPException(status_code=403, detail="Shutdown is disabled.") raise HTTPException(status_code=403, detail="Shutdown is disabled.")
os.kill(os.getpid(), 9) os.kill(os.getpid(), 9)
return {"message": "Application is shutting down."} return {"message": "Application is shutting down."}

View File

@ -1 +1 @@
import{d as t,o as a,m as r,cy as n}from"./index-0ff6a040.js";const p=t({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(o){return(e,s)=>(a(),r(n,{left:e.left,right:e.right},null,8,["left","right"]))}});export{p as default}; import{d as t,o as a,m as r,cz as n}from"./index-2ba197f6.js";const p=t({__name:"ImgSliPagePane",props:{paneIdx:{},tabIdx:{},left:{},right:{}},setup(o){return(e,s)=>(a(),r(n,{left:e.left,right:e.right},null,8,["left","right"]))}});export{p as default};

View File

@ -1 +0,0 @@
import{d as R,l as U,o as r,y as _,c as n,n as a,r as e,s as y,p as b,t as L,v as h,x as q,m as M,K as Q,H as u,L as S,O as H,Q as K,W}from"./index-0ff6a040.js";import{a as j,f as J,L as X,R as Y,b as Z,S as ee}from"./fullScreenContextMenu-b552e684.js";import"./hook-aa833af6.js";import{g as te}from"./db-d4ebc7b6.js";import{u as se}from"./hook-5f30fa96.js";import"./_baseIteratee-d9d0859b.js";const ie={class:"hint"},ne={key:1,class:"preview-switch"},le=R({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(V){const m=V,{queue:p,images:s,onContextMenuClickU:g,stackViewEl:D,previewIdx:l,previewing:v,onPreviewVisibleChange:T,previewImgMove:f,canPreview:I,itemSize:k,gridItems:z,showGenInfo:o,imageGenInfo:w,q:F,multiSelectedIdxs:$,onFileItemClick:B,scroller:C,showMenuIdx:d,onFileDragStart:G,onFileDragEnd:A}=se();return U(()=>m.selectedTagIds,async()=>{var t;const{res:c}=p.pushAction(()=>te(m.selectedTagIds));s.value=await c,(t=C.value)==null||t.scrollToItem(0)},{immediate:!0}),(c,t)=>{const E=H,N=K,O=ee;return r(),_("div",{class:"container",ref_key:"stackViewEl",ref:D},[n(O,{size:"large",spinning:!e(p).isIdle},{default:a(()=>[n(N,{visible:e(o),"onUpdate:visible":t[1]||(t[1]=i=>y(o)?o.value=i:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=i=>o.value=!1)},{cancelText:a(()=>[]),default:a(()=>[n(E,{active:"",loading:!e(F).isIdle},{default:a(()=>[b("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=i=>e(L)(e(w)))},[b("div",ie,h(c.$t("doubleClickToCopy")),1),q(" "+h(e(w)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),e(s)?(r(),M(e(j),{key:0,ref_key:"scroller",ref:C,class:"file-list",items:e(s),"item-size":e(k).first,"key-field":"fullpath","item-secondary-size":e(k).second,gridItems:e(z)},{default:a(({item:i,index:x})=>[n(J,{idx:x,file:i,"show-menu-idx":e(d),"onUpdate:showMenuIdx":t[3]||(t[3]=P=>y(d)?d.value=P:null),onDragstart:e(G),onDragend:e(A),onFileItemClick:e(B),"full-screen-preview-image-url":e(s)[e(l)]?e(Q)(e(s)[e(l)]):"",selected:e($).includes(x),onContextMenuClick:e(g),onPreviewVisibleChange:e(T)},null,8,["idx","file","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):u("",!0),e(v)?(r(),_("div",ne,[n(e(X),{onClick:t[4]||(t[4]=i=>e(f)("prev")),class:S({disable:!e(I)("prev")})},null,8,["class"]),n(e(Y),{onClick:t[5]||(t[5]=i=>e(f)("next")),class:S({disable:!e(I)("next")})},null,8,["class"])])):u("",!0)]),_:1},8,["spinning"]),e(v)&&e(s)&&e(s)[e(l)]?(r(),M(Z,{key:0,file:e(s)[e(l)],idx:e(l),onContextMenuClick:e(g)},null,8,["file","idx","onContextMenuClick"])):u("",!0)],512)}}});const me=W(le,[["__scopeId","data-v-2cae0a95"]]);export{me as default};

View File

@ -0,0 +1 @@
import{d as U,l as L,o as r,y as _,c as n,n as a,r as e,s as y,p as b,t as O,v as h,x as q,m as M,L as Q,E as u,N as S,Q as X,R as j,X as H}from"./index-2ba197f6.js";import{a as J,f as K,L as W,R as Y,b as Z,S as ee}from"./fullScreenContextMenu-6932e224.js";import"./hook-09a5b85c.js";import{g as te}from"./db-b666a3f9.js";import{u as se}from"./hook-081e5d6e.js";import"./_baseIteratee-398c7299.js";const ie={class:"hint"},ne={key:1,class:"preview-switch"},le=U({__name:"MatchedImageGrid",props:{tabIdx:{},paneIdx:{},selectedTagIds:{},id:{}},setup(V){const m=V,{queue:p,images:s,onContextMenuClickU:g,stackViewEl:D,previewIdx:l,previewing:v,onPreviewVisibleChange:T,previewImgMove:f,canPreview:I,itemSize:k,gridItems:z,showGenInfo:o,imageGenInfo:w,q:F,multiSelectedIdxs:$,onFileItemClick:B,scroller:C,showMenuIdx:d,onFileDragStart:E,onFileDragEnd:G}=se();return L(()=>m.selectedTagIds,async()=>{var t;const{res:c}=p.pushAction(()=>te(m.selectedTagIds));s.value=await c,(t=C.value)==null||t.scrollToItem(0)},{immediate:!0}),(c,t)=>{const N=X,R=j,A=ee;return r(),_("div",{class:"container",ref_key:"stackViewEl",ref:D},[n(A,{size:"large",spinning:!e(p).isIdle},{default:a(()=>[n(R,{visible:e(o),"onUpdate:visible":t[1]||(t[1]=i=>y(o)?o.value=i:null),width:"70vw","mask-closable":"",onOk:t[2]||(t[2]=i=>o.value=!1)},{cancelText:a(()=>[]),default:a(()=>[n(N,{active:"",loading:!e(F).isIdle},{default:a(()=>[b("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:t[0]||(t[0]=i=>e(O)(e(w)))},[b("div",ie,h(c.$t("doubleClickToCopy")),1),q(" "+h(e(w)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),e(s)?(r(),M(e(J),{key:0,ref_key:"scroller",ref:C,class:"file-list",items:e(s),"item-size":e(k).first,"key-field":"fullpath","item-secondary-size":e(k).second,gridItems:e(z)},{default:a(({item:i,index:x})=>[n(K,{idx:x,file:i,"show-menu-idx":e(d),"onUpdate:showMenuIdx":t[3]||(t[3]=P=>y(d)?d.value=P:null),onDragstart:e(E),onDragend:e(G),onFileItemClick:e(B),"full-screen-preview-image-url":e(s)[e(l)]?e(Q)(e(s)[e(l)]):"",selected:e($).includes(x),onContextMenuClick:e(g),onPreviewVisibleChange:e(T)},null,8,["idx","file","show-menu-idx","onDragstart","onDragend","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onPreviewVisibleChange"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):u("",!0),e(v)?(r(),_("div",ne,[n(e(W),{onClick:t[4]||(t[4]=i=>e(f)("prev")),class:S({disable:!e(I)("prev")})},null,8,["class"]),n(e(Y),{onClick:t[5]||(t[5]=i=>e(f)("next")),class:S({disable:!e(I)("next")})},null,8,["class"])])):u("",!0)]),_:1},8,["spinning"]),e(v)&&e(s)&&e(s)[e(l)]?(r(),M(Z,{key:0,file:e(s)[e(l)],idx:e(l),onContextMenuClick:e(g)},null,8,["file","idx","onContextMenuClick"])):u("",!0)],512)}}});const me=H(le,[["__scopeId","data-v-2cae0a95"]]);export{me as default};

View File

@ -1 +0,0 @@
import{d as Z,Z as B,aF as j,bD as J,bC as $,o,y as k,c as r,r as e,bG as X,m,n as u,x as w,v,H as f,s as V,p as A,t as Y,K as ee,L as F,aq as ae,ah as ne,T as se,U as te,O as ie,Q as le,W as oe}from"./index-0ff6a040.js";import{a as re,f as ue,L as de,R as ce,b as pe,S as me}from"./fullScreenContextMenu-b552e684.js";/* empty css */import"./hook-aa833af6.js";import{b as U,c as ve,e as fe,u as ge}from"./db-d4ebc7b6.js";import{u as ke}from"./hook-5f30fa96.js";import"./_baseIteratee-d9d0859b.js";const we={key:0,class:"search-bar"},ye={class:"hint"},Ce={key:1,class:"preview-switch"},Ie=Z({__name:"SubstrSearch",setup(be){const{queue:l,images:t,onContextMenuClickU:y,stackViewEl:E,previewIdx:d,previewing:C,onPreviewVisibleChange:T,previewImgMove:I,canPreview:b,itemSize:x,gridItems:R,showGenInfo:c,imageGenInfo:_,q,multiSelectedIdxs:G,onFileItemClick:K,scroller:h,showMenuIdx:g,onFileDragStart:L,onFileDragEnd:N}=ke(),p=B(""),n=B();j(async()=>{n.value=await U(),n.value.img_count&&n.value.expired&&S()});const S=J(()=>l.pushAction(async()=>(await ge(),n.value=await U(),n.value)).res),D=async()=>{var s;t.value=await l.pushAction(()=>fe(p.value)).res,(s=h.value)==null||s.scrollToItem(0),t.value.length||ae.info(ne("fuzzy-search-noResults"))};return $("returnToIIB",async()=>{const s=await l.pushAction(ve).res;n.value.expired=s.expired}),$("searchIndexExpired",()=>n.value&&(n.value.expired=!0)),(s,a)=>{const O=se,M=te,P=ie,H=le,Q=me;return o(),k("div",{class:"container",ref_key:"stackViewEl",ref:E},[n.value?(o(),k("div",we,[r(O,{value:p.value,"onUpdate:value":a[0]||(a[0]=i=>p.value=i),placeholder:s.$t("fuzzy-search-placeholder"),disabled:!e(l).isIdle,onKeydown:X(D,["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),n.value.expired||!n.value.img_count?(o(),m(M,{key:0,onClick:e(S),loading:!e(l).isIdle,type:"primary"},{default:u(()=>[w(v(n.value.img_count===0?s.$t("generateIndexHint"):s.$t("UpdateIndex")),1)]),_:1},8,["onClick","loading"])):(o(),m(M,{key:1,type:"primary",onClick:D,loading:!e(l).isIdle,disabled:!p.value},{default:u(()=>[w(v(s.$t("search")),1)]),_:1},8,["loading","disabled"]))])):f("",!0),r(Q,{size:"large",spinning:!e(l).isIdle},{default:u(()=>[r(H,{visible:e(c),"onUpdate:visible":a[2]||(a[2]=i=>V(c)?c.value=i:null),width:"70vw","mask-closable":"",onOk:a[3]||(a[3]=i=>c.value=!1)},{cancelText:u(()=>[]),default:u(()=>[r(P,{active:"",loading:!e(q).isIdle},{default:u(()=>[A("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:a[1]||(a[1]=i=>e(Y)(e(_)))},[A("div",ye,v(s.$t("doubleClickToCopy")),1),w(" "+v(e(_)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),e(t)?(o(),m(e(re),{key:0,ref_key:"scroller",ref:h,class:"file-list",items:e(t),"item-size":e(x).first,"key-field":"fullpath","item-secondary-size":e(x).second,gridItems:e(R)},{default:u(({item:i,index:z})=>[r(ue,{idx:z,file:i,"show-menu-idx":e(g),"onUpdate:showMenuIdx":a[4]||(a[4]=W=>V(g)?g.value=W:null),onFileItemClick:e(K),"full-screen-preview-image-url":e(t)[e(d)]?e(ee)(e(t)[e(d)]):"",selected:e(G).includes(z),onContextMenuClick:e(y),onDragstart:e(L),onDragend:e(N),onPreviewVisibleChange:e(T)},null,8,["idx","file","show-menu-idx","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onDragstart","onDragend","onPreviewVisibleChange"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):f("",!0),e(C)?(o(),k("div",Ce,[r(e(de),{onClick:a[5]||(a[5]=i=>e(I)("prev")),class:F({disable:!e(b)("prev")})},null,8,["class"]),r(e(ce),{onClick:a[6]||(a[6]=i=>e(I)("next")),class:F({disable:!e(b)("next")})},null,8,["class"])])):f("",!0)]),_:1},8,["spinning"]),e(C)&&e(t)&&e(t)[e(d)]?(o(),m(pe,{key:1,file:e(t)[e(d)],idx:e(d),onContextMenuClick:e(y)},null,8,["file","idx","onContextMenuClick"])):f("",!0)],512)}}});const Be=oe(Ie,[["__scopeId","data-v-56ea21ae"]]);export{Be as default};

View File

@ -0,0 +1 @@
import{d as j,$,aG as J,bE as W,bD as B,o,y as k,c as r,r as e,bH as Y,m,n as u,x as w,v,E as f,s as V,p as E,t as Z,L as ee,N as A,ar as ae,ai as ne,U as se,V as te,Q as ie,R as le,X as oe}from"./index-2ba197f6.js";import{a as re,f as ue,L as de,R as ce,b as pe,S as me}from"./fullScreenContextMenu-6932e224.js";/* empty css */import"./hook-09a5b85c.js";import{b as U,c as ve,e as fe,u as ge}from"./db-b666a3f9.js";import{u as ke}from"./hook-081e5d6e.js";import"./_baseIteratee-398c7299.js";const we={key:0,class:"search-bar"},ye={class:"hint"},Ie={key:1,class:"preview-switch"},Ce=j({__name:"SubstrSearch",setup(be){const{queue:l,images:t,onContextMenuClickU:y,stackViewEl:F,previewIdx:d,previewing:I,onPreviewVisibleChange:R,previewImgMove:C,canPreview:b,itemSize:x,gridItems:N,showGenInfo:c,imageGenInfo:_,q:T,multiSelectedIdxs:G,onFileItemClick:L,scroller:h,showMenuIdx:g,onFileDragStart:P,onFileDragEnd:q}=ke(),p=$(""),n=$();J(async()=>{n.value=await U(),n.value.img_count&&n.value.expired&&S()});const S=W(()=>l.pushAction(async()=>(await ge(),n.value=await U(),n.value)).res),D=async()=>{var s;t.value=await l.pushAction(()=>fe(p.value)).res,(s=h.value)==null||s.scrollToItem(0),t.value.length||ae.info(ne("fuzzy-search-noResults"))};return B("returnToIIB",async()=>{const s=await l.pushAction(ve).res;n.value.expired=s.expired}),B("searchIndexExpired",()=>n.value&&(n.value.expired=!0)),(s,a)=>{const K=se,M=te,O=ie,H=le,Q=me;return o(),k("div",{class:"container",ref_key:"stackViewEl",ref:F},[n.value?(o(),k("div",we,[r(K,{value:p.value,"onUpdate:value":a[0]||(a[0]=i=>p.value=i),placeholder:s.$t("fuzzy-search-placeholder"),disabled:!e(l).isIdle,onKeydown:Y(D,["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),n.value.expired||!n.value.img_count?(o(),m(M,{key:0,onClick:e(S),loading:!e(l).isIdle,type:"primary"},{default:u(()=>[w(v(n.value.img_count===0?s.$t("generateIndexHint"):s.$t("UpdateIndex")),1)]),_:1},8,["onClick","loading"])):(o(),m(M,{key:1,type:"primary",onClick:D,loading:!e(l).isIdle,disabled:!p.value},{default:u(()=>[w(v(s.$t("search")),1)]),_:1},8,["loading","disabled"]))])):f("",!0),r(Q,{size:"large",spinning:!e(l).isIdle},{default:u(()=>[r(H,{visible:e(c),"onUpdate:visible":a[2]||(a[2]=i=>V(c)?c.value=i:null),width:"70vw","mask-closable":"",onOk:a[3]||(a[3]=i=>c.value=!1)},{cancelText:u(()=>[]),default:u(()=>[r(O,{active:"",loading:!e(T).isIdle},{default:u(()=>[E("div",{style:{width:"100%","word-break":"break-all","white-space":"pre-line","max-height":"70vh",overflow:"auto"},onDblclick:a[1]||(a[1]=i=>e(Z)(e(_)))},[E("div",ye,v(s.$t("doubleClickToCopy")),1),w(" "+v(e(_)),1)],32)]),_:1},8,["loading"])]),_:1},8,["visible"]),e(t)?(o(),m(e(re),{key:0,ref_key:"scroller",ref:h,class:"file-list",items:e(t),"item-size":e(x).first,"key-field":"fullpath","item-secondary-size":e(x).second,gridItems:e(N)},{default:u(({item:i,index:z})=>[r(ue,{idx:z,file:i,"show-menu-idx":e(g),"onUpdate:showMenuIdx":a[4]||(a[4]=X=>V(g)?g.value=X:null),onFileItemClick:e(L),"full-screen-preview-image-url":e(t)[e(d)]?e(ee)(e(t)[e(d)]):"",selected:e(G).includes(z),onContextMenuClick:e(y),onDragstart:e(P),onDragend:e(q),onPreviewVisibleChange:e(R)},null,8,["idx","file","show-menu-idx","onFileItemClick","full-screen-preview-image-url","selected","onContextMenuClick","onDragstart","onDragend","onPreviewVisibleChange"])]),_:1},8,["items","item-size","item-secondary-size","gridItems"])):f("",!0),e(I)?(o(),k("div",Ie,[r(e(de),{onClick:a[5]||(a[5]=i=>e(C)("prev")),class:A({disable:!e(b)("prev")})},null,8,["class"]),r(e(ce),{onClick:a[6]||(a[6]=i=>e(C)("next")),class:A({disable:!e(b)("next")})},null,8,["class"])])):f("",!0)]),_:1},8,["spinning"]),e(I)&&e(t)&&e(t)[e(d)]?(o(),m(pe,{key:1,file:e(t)[e(d)],idx:e(d),onContextMenuClick:e(y)},null,8,["file","idx","onContextMenuClick"])):f("",!0)],512)}}});const $e=oe(Ce,[["__scopeId","data-v-56ea21ae"]]);export{$e as default};

File diff suppressed because one or more lines are too long

1
vue/dist/assets/TagSearch-deb87b54.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{cv as h,cw as d,c5 as y,aY as M,bi as E,cx as O,bk as P,cy as _,bg as p,bA as C}from"./index-2ba197f6.js";function I(n){return function(r){return r==null?void 0:r[n]}}var L=1,w=2;function D(n,r,e,i){var t=e.length,A=t,a=!i;if(n==null)return!A;for(n=Object(n);t--;){var f=e[t];if(a&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++t<A;){f=e[t];var u=f[0],s=n[u],o=f[1];if(a&&f[2]){if(s===void 0&&!(u in n))return!1}else{var l=new h;if(i)var R=i(s,o,u,n,r,l);if(!(R===void 0?d(o,s,L|w,i,l):R))return!1}}return!0}function c(n){return n===n&&!y(n)}function G(n){for(var r=M(n),e=r.length;e--;){var i=r[e],t=n[i];r[e]=[i,t,c(t)]}return r}function g(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function b(n){var r=G(n);return r.length==1&&r[0][2]?g(r[0][0],r[0][1]):function(e){return e===n||D(e,n,r)}}function F(n,r,e){var i=n==null?void 0:E(n,r);return i===void 0?e:i}var x=1,S=2;function m(n,r){return O(n)&&c(r)?g(P(n),r):function(e){var i=F(e,n);return i===void 0&&i===r?_(e,n):d(r,i,x|S)}}function v(n){return function(r){return E(r,n)}}function K(n){return O(n)?I(P(n)):v(n)}function T(n){return typeof n=="function"?n:n==null?p:typeof n=="object"?C(n)?m(n[0],n[1]):b(n):K(n)}export{T as b};

View File

@ -1 +0,0 @@
import{cu as M,cv as d,c4 as _,aX as g,bh as h,cw as E,bj as O,cx as p,bf as y,bz as C}from"./index-0ff6a040.js";function I(n){return function(r){return r==null?void 0:r[n]}}var L=1,w=2;function D(n,r,e,i){var t=e.length,A=t,a=!i;if(n==null)return!A;for(n=Object(n);t--;){var f=e[t];if(a&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return!1}for(;++t<A;){f=e[t];var u=f[0],s=n[u],o=f[1];if(a&&f[2]){if(s===void 0&&!(u in n))return!1}else{var l=new M;if(i)var R=i(s,o,u,n,r,l);if(!(R===void 0?d(o,s,L|w,i,l):R))return!1}}return!0}function P(n){return n===n&&!_(n)}function G(n){for(var r=g(n),e=r.length;e--;){var i=r[e],t=n[i];r[e]=[i,t,P(t)]}return r}function c(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function b(n){var r=G(n);return r.length==1&&r[0][2]?c(r[0][0],r[0][1]):function(e){return e===n||D(e,n,r)}}function F(n,r,e){var i=n==null?void 0:h(n,r);return i===void 0?e:i}var x=1,S=2;function m(n,r){return E(n)&&P(r)?c(O(n),r):function(e){var i=F(e,n);return i===void 0&&i===r?p(e,n):d(r,i,x|S)}}function v(n){return function(r){return h(r,n)}}function K(n){return E(n)?I(O(n)):v(n)}function T(n){return typeof n=="function"?n:n==null?y:typeof n=="object"?C(n)?m(n[0],n[1]):b(n):K(n)}export{T as b};

View File

@ -1 +1 @@
import{ca as t}from"./index-0ff6a040.js";const o=async()=>(await t.value.get("/db/basic_info")).data,c=async()=>(await t.value.get("/db/expired_dirs")).data,r=async()=>{await t.value.post("/db/update_image_data",{},{timeout:1/0})},d=async a=>(await t.value.post("/db/match_images_by_tags",a)).data,g=async a=>(await t.value.post("/db/add_custom_tag",a)).data,u=async a=>(await t.value.post("/db/toggle_custom_tag_to_img",a)).data,p=async a=>{await t.value.post("/db/remove_custom_tag",a)},i=async a=>(await t.value.get("/db/img_selected_custom_tag",{params:{path:a}})).data,m=async a=>(await t.value.get("/db/search_by_substr",{params:{substr:a}})).data,e="/db/scanned_paths",_=async a=>{await t.value.post(e,{path:a})},b=async a=>{await t.value.delete(e,{data:{path:a}})};export{_ as a,o as b,c,g as d,m as e,i as f,d as g,b as h,p as r,u as t,r as u}; import{cb as t}from"./index-2ba197f6.js";const o=async()=>(await t.value.get("/db/basic_info")).data,c=async()=>(await t.value.get("/db/expired_dirs")).data,r=async()=>{await t.value.post("/db/update_image_data",{},{timeout:1/0})},d=async a=>(await t.value.post("/db/match_images_by_tags",a)).data,g=async a=>(await t.value.post("/db/add_custom_tag",a)).data,u=async a=>(await t.value.post("/db/toggle_custom_tag_to_img",a)).data,p=async a=>{await t.value.post("/db/remove_custom_tag",a)},i=async a=>(await t.value.get("/db/img_selected_custom_tag",{params:{path:a}})).data,m=async a=>(await t.value.get("/db/search_by_substr",{params:{substr:a}})).data,e="/db/scanned_paths",_=async a=>{await t.value.post(e,{path:a})},b=async a=>{await t.value.delete(e,{data:{path:a}})};export{_ as a,o as b,c,g as d,m as e,i as f,d as g,b as h,p as r,u as t,r as u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{Z as c,bB as y,bf as q}from"./index-0ff6a040.js";import{u as D,b as E,f as P,a as z,c as G,d as L,e as Q,h as R}from"./hook-aa833af6.js";const B=()=>{const e=c(),l=y(),o=c(),s={tabIdx:-1,target:"local",paneIdx:-1,walkMode:!1},{stackViewEl:r,multiSelectedIdxs:u,stack:m}=D({images:e}).toRefs(),{itemSize:f,gridItems:v}=E(s),{showMenuIdx:p}=P();z(s);const{onFileDragStart:I,onFileDragEnd:d}=G(),{showGenInfo:g,imageGenInfo:w,q:x,onContextMenuClick:i,onFileItemClick:k}=L(s,{openNext:q}),{previewIdx:h,previewing:F,onPreviewVisibleChange:M,previewImgMove:b,canPreview:C}=Q(s,{scroller:o}),S=async(a,t,n)=>{m.value=[{curr:"",files:e.value}],await i(a,t,n)};return R("removeFiles",async({paths:a})=>{var t;e.value=(t=e.value)==null?void 0:t.filter(n=>!a.includes(n.fullpath))}),{scroller:o,queue:l,images:e,onContextMenuClickU:S,stackViewEl:r,previewIdx:h,previewing:F,onPreviewVisibleChange:M,previewImgMove:b,canPreview:C,itemSize:f,gridItems:v,showGenInfo:g,imageGenInfo:w,q:x,onContextMenuClick:i,onFileItemClick:k,showMenuIdx:p,multiSelectedIdxs:u,onFileDragStart:I,onFileDragEnd:d}};export{B as u}; import{$ as c,bC as y,bg as q}from"./index-2ba197f6.js";import{u as D,b as E,f as P,a as z,c as G,d as L,e as Q,h as R}from"./hook-09a5b85c.js";const H=()=>{const e=c(),l=y(),o=c(),s={tabIdx:-1,target:"local",paneIdx:-1,walkMode:!1},{stackViewEl:r,multiSelectedIdxs:u,stack:m}=D({images:e}).toRefs(),{itemSize:v,gridItems:f}=E(s),{showMenuIdx:p}=P();z(s);const{onFileDragStart:I,onFileDragEnd:d}=G(),{showGenInfo:g,imageGenInfo:w,q:x,onContextMenuClick:i,onFileItemClick:k}=L(s,{openNext:q}),{previewIdx:h,previewing:C,onPreviewVisibleChange:F,previewImgMove:M,canPreview:b}=Q(s,{scroller:o}),S=async(a,t,n)=>{m.value=[{curr:"",files:e.value}],await i(a,t,n)};return R("removeFiles",async({paths:a})=>{var t;e.value=(t=e.value)==null?void 0:t.filter(n=>!a.includes(n.fullpath))}),{scroller:o,queue:l,images:e,onContextMenuClickU:S,stackViewEl:r,previewIdx:h,previewing:C,onPreviewVisibleChange:F,previewImgMove:M,canPreview:b,itemSize:v,gridItems:f,showGenInfo:g,imageGenInfo:w,q:x,onContextMenuClick:i,onFileItemClick:k,showMenuIdx:p,multiSelectedIdxs:u,onFileDragStart:I,onFileDragEnd:d}};export{H as u};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.preview-switch[data-v-893d9b97]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-893d9b97]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-893d9b97]{opacity:0;pointer-events:none;cursor:none}.breadcrumb[data-v-893d9b97]{display:flex;align-items:center}.breadcrumb>*[data-v-893d9b97]{margin-right:4px}.container[data-v-893d9b97]{background:var(--zp-secondary-background);height:var(--pane-max-height)}.location-bar[data-v-893d9b97]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}.location-bar .actions[data-v-893d9b97]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-893d9b97]{margin-left:8px}.view[data-v-893d9b97]{padding:8px;height:calc(100vh - 48px)}.view .file-list[data-v-893d9b97]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-893d9b97]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)} .ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#de632f}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}.nprogress{pointer-events:none}.nprogress .bar{background:#29d;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}.nprogress .peg{display:block;position:absolute;right:0px;width:100px;height:100%;box-shadow:0 0 10px #29d,0 0 5px #29d;opacity:1;-webkit-transform:rotate(3deg) translate(0px,-4px);-ms-transform:rotate(3deg) translate(0px,-4px);transform:rotate(3deg) translateY(-4px)}.nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}.nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border:solid 2px transparent;border-top-color:#29d;border-left-color:#29d;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent .nprogress .spinner,.nprogress-custom-parent .nprogress .bar{position:absolute}@-webkit-keyframes nprogress-spinner{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(360deg)}}@keyframes nprogress-spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.preview-switch[data-v-5a65a789]{position:fixed;top:0;bottom:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;z-index:11111;pointer-events:none}.preview-switch>*[data-v-5a65a789]{color:#fff;margin:16px;font-size:4em;pointer-events:all;cursor:pointer}.preview-switch>*.disable[data-v-5a65a789]{opacity:0;pointer-events:none;cursor:none}.breadcrumb[data-v-5a65a789]{display:flex;align-items:center}.breadcrumb>*[data-v-5a65a789]{margin-right:4px}.container[data-v-5a65a789]{background:var(--zp-secondary-background);height:var(--pane-max-height)}.location-bar[data-v-5a65a789]{padding:4px 16px;background:var(--zp-primary-background);border-bottom:1px solid var(--zp-border);display:flex;align-items:center;justify-content:space-between}.location-bar .actions[data-v-5a65a789]{display:flex;align-items:center;flex-shrink:0}.location-bar a.opt[data-v-5a65a789]{margin-left:8px}.view[data-v-5a65a789]{padding:8px;height:calc(100vh - 48px)}.view .file-list[data-v-5a65a789]{list-style:none;padding:8px;height:100%;overflow:auto}.hint[data-v-5a65a789]{padding:4px;border:4px;background:var(--zp-secondary-background);border:1px solid var(--zp-border)}

1
vue/dist/assets/stackView-d3da188b.js vendored Normal file

File diff suppressed because one or more lines are too long

2
vue/dist/index.html vendored
View File

@ -7,7 +7,7 @@
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Infinite Image Browsing</title> <title>Infinite Image Browsing</title>
<script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-0ff6a040.js"></script> <script type="module" crossorigin src="/infinite_image_browsing/fe-static/assets/index-2ba197f6.js"></script>
<link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-4ed7d1e3.css"> <link rel="stylesheet" href="/infinite_image_browsing/fe-static/assets/index-4ed7d1e3.css">
</head> </head>

View File

@ -8,6 +8,7 @@ import { createReactiveQueue, globalEvents, useGlobalEventListen } from './util'
import { resolveQueryActions } from './queryActions' import { resolveQueryActions } from './queryActions'
import { refreshTauriConf, tauriConf } from './util/tauriAppConf' import { refreshTauriConf, tauriConf } from './util/tauriAppConf'
import { openModal } from './taurilaunchModal' import { openModal } from './taurilaunchModal'
import { isTauri } from './util/env'
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const queue = createReactiveQueue() const queue = createReactiveQueue()
@ -23,7 +24,7 @@ useGlobalEventListen('updateGlobalSetting', async () => {
resolveQueryActions(globalStore) resolveQueryActions(globalStore)
}) })
onMounted(async () => { onMounted(async () => {
if (import.meta.env.TAURI_ARCH) { if (isTauri) {
openModal() openModal()
} }
globalEvents.emit('updateGlobalSetting') globalEvents.emit('updateGlobalSetting')

View File

@ -79,6 +79,7 @@ export interface GlobalConf {
sd_cwd: string sd_cwd: string
extra_paths: { path: string }[] extra_paths: { path: string }[]
enable_access_control: boolean enable_access_control: boolean
launch_mode: 'server' | 'sd'
} }
export const getGlobalSetting = async () => { export const getGlobalSetting = async () => {

View File

@ -35,19 +35,21 @@ const tags = computed(() => {
<template v-if="isImageFile(file.name)"> <template v-if="isImageFile(file.name)">
<a-menu-item key="viewGenInfo">{{ $t('viewGenerationInfo') }}</a-menu-item> <a-menu-item key="viewGenInfo">{{ $t('viewGenerationInfo') }}</a-menu-item>
<a-menu-divider /> <a-menu-divider />
<a-menu-item key="send2txt2img">{{ $t('sendToTxt2img') }}</a-menu-item> <template v-if="global.conf?.launch_mode !== 'server'">
<a-menu-item key="send2img2img">{{ $t('sendToImg2img') }}</a-menu-item> <a-menu-item key="send2txt2img">{{ $t('sendToTxt2img') }}</a-menu-item>
<a-menu-item key="send2inpaint">{{ $t('sendToInpaint') }}</a-menu-item> <a-menu-item key="send2img2img">{{ $t('sendToImg2img') }}</a-menu-item>
<a-menu-item key="send2extras">{{ $t('sendToExtraFeatures') }}</a-menu-item> <a-menu-item key="send2inpaint">{{ $t('sendToInpaint') }}</a-menu-item>
<a-sub-menu key="send2controlnet" :title="$t('sendToControlNet')"> <a-menu-item key="send2extras">{{ $t('sendToExtraFeatures') }}</a-menu-item>
<a-menu-item key="send2controlnet-txt2img">{{ $t('t2i') }}</a-menu-item> <a-sub-menu key="send2controlnet" :title="$t('sendToControlNet')">
<a-menu-item key="send2controlnet-img2img">{{ $t('i2i') }}</a-menu-item> <a-menu-item key="send2controlnet-txt2img">{{ $t('t2i') }}</a-menu-item>
</a-sub-menu> <a-menu-item key="send2controlnet-img2img">{{ $t('i2i') }}</a-menu-item>
</a-sub-menu>
</template>
<a-menu-item key="send2savedDir">{{ $t('send2savedDir') }}</a-menu-item> <a-menu-item key="send2savedDir">{{ $t('send2savedDir') }}</a-menu-item>
<a-menu-divider /> <a-menu-divider />
<a-sub-menu key="toggle-tag" :title="$t('toggleTag')"> <a-sub-menu key="toggle-tag" :title="$t('toggleTag')">
<a-menu-item v-for="tag in tags" :key="`toggle-tag-${tag.id}`">{{ tag.name }} <star-filled v-if="tag.selected" /><star-outlined <a-menu-item v-for="tag in tags" :key="`toggle-tag-${tag.id}`">{{ tag.name }} <star-filled
v-else /> v-if="tag.selected" /><star-outlined v-else />
</a-menu-item> </a-menu-item>
</a-sub-menu> </a-sub-menu>
<a-menu-item key="openWithLocalFileBrowser">{{ $t('openWithLocalFileBrowser') }}</a-menu-item> <a-menu-item key="openWithLocalFileBrowser">{{ $t('openWithLocalFileBrowser') }}</a-menu-item>

View File

@ -150,13 +150,20 @@ const baseInfoTags = computed(() => {
<a-button>{{ t('openContextMenu') }}</a-button> <a-button>{{ t('openContextMenu') }}</a-button>
<template #overlay> <template #overlay>
<a-menu @click="emit('contextMenuClick', $event, file, idx)"> <a-menu @click="emit('contextMenuClick', $event, file, idx)">
<a-menu-item key="send2txt2img">{{ $t('sendToTxt2img') }}</a-menu-item> <template v-if="global.conf?.launch_mode !== 'server'">
<a-menu-item key="send2img2img">{{ $t('sendToImg2img') }}</a-menu-item> <a-menu-item key="send2txt2img">{{ $t('sendToTxt2img') }}</a-menu-item>
<a-menu-item key="send2inpaint">{{ $t('sendToInpaint') }}</a-menu-item> <a-menu-item key="send2img2img">{{ $t('sendToImg2img') }}</a-menu-item>
<a-menu-item key="send2extras">{{ $t('sendToExtraFeatures') }}</a-menu-item> <a-menu-item key="send2inpaint">{{ $t('sendToInpaint') }}</a-menu-item>
<a-menu-item key="send2extras">{{ $t('sendToExtraFeatures') }}</a-menu-item>
<a-sub-menu key="send2controlnet" :title="$t('sendToControlNet')">
<a-menu-item key="send2controlnet-txt2img">{{ $t('t2i') }}</a-menu-item>
<a-menu-item key="send2controlnet-img2img">{{ $t('i2i') }}</a-menu-item>
</a-sub-menu>
</template>
<a-menu-item key="send2savedDir">{{ $t('send2savedDir') }}</a-menu-item> <a-menu-item key="send2savedDir">{{ $t('send2savedDir') }}</a-menu-item>
<a-menu-item key="deleteFiles" :disabled="toRawFileUrl(file) === global.fullscreenPreviewInitialUrl">{{ <a-menu-item key="deleteFiles" :disabled="toRawFileUrl(file) === global.fullscreenPreviewInitialUrl">
$t('deleteSelected') }}</a-menu-item> {{ $t('deleteSelected') }}
</a-menu-item>
<a-menu-item key="previewInNewWindow">{{ $t('previewInNewWindow') }}</a-menu-item> <a-menu-item key="previewInNewWindow">{{ $t('previewInNewWindow') }}</a-menu-item>
<a-menu-item key="download">{{ $t('download') }}</a-menu-item> <a-menu-item key="download">{{ $t('download') }}</a-menu-item>
<a-menu-item key="copyPreviewUrl">{{ $t('copySourceFilePreviewLink') }}</a-menu-item> <a-menu-item key="copyPreviewUrl">{{ $t('copySourceFilePreviewLink') }}</a-menu-item>

View File

@ -25,6 +25,7 @@ import fullScreenContextMenu from './fullScreenContextMenu.vue'
import { copy2clipboardI18n } from '@/util' import { copy2clipboardI18n } from '@/util'
import { openFolder } from '@/api' import { openFolder } from '@/api'
import { sortMethods } from './fileSort' import { sortMethods } from './fileSort'
import { isTauri } from '@/util/env'
const global = useGlobalStore() const global = useGlobalStore()
const props = defineProps<{ const props = defineProps<{
@ -138,7 +139,7 @@ watch(
<div class="actions"> <div class="actions">
<a class="opt" @click.prevent="refresh"> {{ $t('refresh') }} </a> <a class="opt" @click.prevent="refresh"> {{ $t('refresh') }} </a>
<a class="opt" @click.prevent.stop="selectAll"> {{ $t('selectAll') }} </a> <a class="opt" @click.prevent.stop="selectAll"> {{ $t('selectAll') }} </a>
<a class="opt" @click.prevent="share"> {{ $t('share') }} </a> <a class="opt" @click.prevent="share" v-if="!isTauri"> {{ $t('share') }} </a>
<a-dropdown> <a-dropdown>
<a class="opt" @click.prevent> <a class="opt" @click.prevent>
{{ $t('quickMove') }} {{ $t('quickMove') }}

View File

@ -9,6 +9,7 @@ import { relaunch } from '@tauri-apps/api/process'
import { appConfFilename } from '@/taurilaunchModal' import { appConfFilename } from '@/taurilaunchModal'
import { fs, invoke } from '@tauri-apps/api' import { fs, invoke } from '@tauri-apps/api'
import { getShortcutStrFromEvent } from '@/util/shortcut' import { getShortcutStrFromEvent } from '@/util/shortcut'
import { isTauri } from '@/util/env'
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
@ -23,7 +24,6 @@ const onShortcutKeyDown = (e: KeyboardEvent, key: keyof Shortcut) => {
globalStore.shortcut[key] = keysStr globalStore.shortcut[key] = keysStr
} }
} }
const isTauri = !!import.meta.env.TAURI_ARCH
const oninitTauriLaunchConf = async () => { const oninitTauriLaunchConf = async () => {
await invoke('shutdown_api_server_command') await invoke('shutdown_api_server_command')

1
vue/src/util/env.ts Normal file
View File

@ -0,0 +1 @@
export const isTauri = !!import.meta.env.TAURI_ARCH