Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
bit-pm
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
燕伟桐
bit-pm
Commits
674dc6ae
Unverified
提交
674dc6ae
authored
4月 29, 2025
作者:
Will Chen
提交者:
GitHub
4月 29, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Provide a way to open app folder in finder (#42)
上级
7ab1aab9
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
54 行增加
和
5 行删除
+54
-5
shell_handler.ts
src/ipc/handlers/shell_handler.ts
+20
-0
ipc_client.ts
src/ipc/ipc_client.ts
+16
-2
app-details.tsx
src/pages/app-details.tsx
+17
-3
preload.ts
src/preload.ts
+1
-0
没有找到文件。
src/ipc/handlers/shell_handler.ts
浏览文件 @
674dc6ae
...
...
@@ -22,4 +22,24 @@ export function registerShellHandlers() {
return
{
success
:
false
,
error
:
(
error
as
Error
).
message
};
}
});
ipcMain
.
handle
(
"show-item-in-folder"
,
async
(
_event
,
fullPath
:
string
)
=>
{
try
{
// Validate that a path was provided
if
(
!
fullPath
)
{
logger
.
error
(
"Attempted to show item with empty path"
);
return
{
success
:
false
,
error
:
"No file path provided."
,
};
}
shell
.
showItemInFolder
(
fullPath
);
logger
.
debug
(
"Showed item in folder:"
,
fullPath
);
return
{
success
:
true
};
}
catch
(
error
)
{
logger
.
error
(
`Failed to show item in folder
${
fullPath
}
:`
,
error
);
return
{
success
:
false
,
error
:
(
error
as
Error
).
message
};
}
});
}
src/ipc/ipc_client.ts
浏览文件 @
674dc6ae
...
...
@@ -292,8 +292,22 @@ export class IpcClient {
return
result
as
{
success
:
boolean
;
error
?:
string
};
}
catch
(
error
)
{
showError
(
error
);
// Ensure a consistent return type even on invoke error
return
{
success
:
false
,
error
:
(
error
as
Error
).
message
};
throw
error
;
}
}
public
async
showItemInFolder
(
fullPath
:
string
):
Promise
<
{
success
:
boolean
;
error
?:
string
}
>
{
try
{
const
result
=
await
this
.
ipcRenderer
.
invoke
(
"show-item-in-folder"
,
fullPath
);
return
result
as
{
success
:
boolean
;
error
?:
string
};
}
catch
(
error
)
{
showError
(
error
);
throw
error
;
}
}
...
...
src/pages/app-details.tsx
浏览文件 @
674dc6ae
...
...
@@ -12,6 +12,7 @@ import {
MessageCircle
,
Pencil
,
Github
,
Folder
,
}
from
"lucide-react"
;
import
{
Popover
,
...
...
@@ -159,6 +160,8 @@ export default function AppDetailsPage() {
);
}
const
fullAppPath
=
appBasePath
.
replace
(
"$APP_BASE_PATH"
,
selectedApp
.
path
);
return
(
<
div
className=
"relative min-h-screen p-4 w-full"
>
<
Button
...
...
@@ -232,9 +235,20 @@ export default function AppDetailsPage() {
<
span
className=
"block text-gray-500 dark:text-gray-400 mb-0.5 text-xs"
>
Path
</
span
>
<
span
className=
"text-sm break-all"
>
{
appBasePath
.
replace
(
"$APP_BASE_PATH"
,
selectedApp
.
path
)
}
</
span
>
<
div
className=
"flex items-center gap-1"
>
<
span
className=
"text-sm break-all"
>
{
fullAppPath
}
</
span
>
<
Button
variant=
"ghost"
size=
"sm"
className=
"p-0.5 h-auto cursor-pointer hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"
onClick=
{
()
=>
{
IpcClient
.
getInstance
().
showItemInFolder
(
fullAppPath
);
}
}
title=
"Show in folder"
>
<
Folder
className=
"h-3.5 w-3.5"
/>
</
Button
>
</
div
>
</
div
>
</
div
>
<
div
className=
"mt-4 flex flex-col gap-2"
>
...
...
src/preload.ts
浏览文件 @
674dc6ae
...
...
@@ -30,6 +30,7 @@ const validInvokeChannels = [
"set-user-settings"
,
"get-env-vars"
,
"open-external-url"
,
"show-item-in-folder"
,
"reset-all"
,
"nodejs-status"
,
"install-node"
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论