From 5b2f0fdbd5cb6f7c7f0c56f989d04995b17fe660 Mon Sep 17 00:00:00 2001 From: MadDogOwner Date: Sun, 19 Jul 2026 15:47:15 +0800 Subject: [PATCH] feat(context-menu): add "Open with" option to context menu Signed-off-by: MadDogOwner --- src/lang/en/home.json | 1 + src/pages/home/folder/context-menu.tsx | 28 ++++++++++++++++++++++++-- src/pages/home/toolbar/operations.ts | 2 ++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/lang/en/home.json b/src/lang/en/home.json index 104cc2e83..ad24603de 100644 --- a/src/lang/en/home.json +++ b/src/lang/en/home.json @@ -70,6 +70,7 @@ "switch_lang": "Switch Language", "toggle_markdown_toc": "Toggle Outline", "toggle_checkbox": "Toggle Checkbox", + "open_with": "Open with ...", "rename": "Rename", "input_new_name": "Input new name", "move": "Move", diff --git a/src/pages/home/folder/context-menu.tsx b/src/pages/home/folder/context-menu.tsx index d1d9d92b9..ee8049f39 100644 --- a/src/pages/home/folder/context-menu.tsx +++ b/src/pages/home/folder/context-menu.tsx @@ -3,7 +3,7 @@ import { useCopyLink, useDownload, useLink, useRouter, useT } from "~/hooks" import "solid-contextmenu/dist/style.css" import { HStack, Icon, Text, useColorMode, Image } from "@hope-ui/solid" import { operations } from "../toolbar/operations" -import { For, Show } from "solid-js" +import { createMemo, For, Show } from "solid-js" import { bus, convertURL, notify, torrentParse } from "~/utils" import { ObjType, UserMethods } from "~/types" import { @@ -16,6 +16,7 @@ import { userCan, } from "~/store" import { players } from "../previews/video_box" +import { getPreviews } from "../previews" import { BsPlayCircleFill } from "solid-icons/bs" import { isArchive } from "~/store/archive" import axios from "axios" @@ -45,7 +46,15 @@ export const ContextMenu = () => { return UserMethods.is_admin(me()) || getSettingBool("package_download") } const { rawLink } = useLink() - const { isShare } = useRouter() + const { isShare, pushHref, to } = useRouter() + const openWithPreviews = createMemo(() => { + const objs = selectedObjs() + if (objs.length !== 1) return [] + const obj = objs[0] + if (obj.is_dir) return [] + return getPreviews({ ...obj, provider: objStore.provider }) + // .filter((p) => p.key !== "download") + }) return ( { theme={colorMode() !== "dark" ? "light" : "dark"} style="z-index: var(--hope-zIndices-popover)" > + 0}> + }> + + {(preview) => ( + { + to(`${pushHref(props.name)}?preview=${preview.key}`) + }} + > + {preview.name} + + )} + + + {(name) => (