Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
bit-pm
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
燕伟桐
bit-pm
Commits
56900ebe
Unverified
提交
56900ebe
authored
5月 15, 2025
作者:
Will Chen
提交者:
GitHub
5月 15, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
More robust check of whether release notes exist (#175)
上级
7bcb68e8
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
88 行增加
和
19 行删除
+88
-19
release_note_handlers.ts
src/ipc/handlers/release_note_handlers.ts
+59
-0
ipc_client.ts
src/ipc/ipc_client.ts
+7
-0
ipc_host.ts
src/ipc/ipc_host.ts
+2
-0
ipc_types.ts
src/ipc/ipc_types.ts
+4
-0
home.tsx
src/pages/home.tsx
+15
-19
preload.ts
src/preload.ts
+1
-0
没有找到文件。
src/ipc/handlers/release_note_handlers.ts
0 → 100644
浏览文件 @
56900ebe
import
log
from
"electron-log"
;
import
fetch
from
"node-fetch"
;
import
{
createLoggedHandler
}
from
"./safe_handle"
;
import
{
DoesReleaseNoteExistParams
}
from
"../ipc_types"
;
const
logger
=
log
.
scope
(
"release_note_handlers"
);
const
handle
=
createLoggedHandler
(
logger
);
export
function
registerReleaseNoteHandlers
()
{
handle
(
"does-release-note-exist"
,
async
(
_
,
params
:
DoesReleaseNoteExistParams
)
=>
{
const
{
version
}
=
params
;
if
(
!
version
||
typeof
version
!==
"string"
)
{
throw
new
Error
(
"Invalid version provided"
);
}
const
releaseNoteUrl
=
`https://www.dyad.sh/docs/releases/
${
version
}
`
;
logger
.
debug
(
`Checking for release note at:
${
releaseNoteUrl
}
`
);
try
{
const
response
=
await
fetch
(
releaseNoteUrl
,
{
method
:
"HEAD"
});
// Use HEAD to check existence without downloading content
if
(
response
.
ok
)
{
logger
.
debug
(
`Release note found for version
${
version
}
at
${
releaseNoteUrl
}
`
,
);
return
{
exists
:
true
,
url
:
releaseNoteUrl
};
}
else
if
(
response
.
status
===
404
)
{
logger
.
debug
(
`Release note not found for version
${
version
}
at
${
releaseNoteUrl
}
`
,
);
return
{
exists
:
false
};
}
else
{
// Log other non-404 errors but still treat as "not found" for the client,
// as the primary goal is to check existence.
logger
.
warn
(
`Unexpected status code
${
response
.
status
}
when checking for release note:
${
releaseNoteUrl
}
`
,
);
return
{
exists
:
false
};
}
}
catch
(
error
)
{
logger
.
error
(
`Error fetching release note for version
${
version
}
at
${
releaseNoteUrl
}
:`
,
error
,
);
// In case of network errors, etc., assume it doesn't exist or is inaccessible.
// Throwing an error here would propagate to the client and might be too disruptive
// if the check is just for UI purposes (e.g., showing a link).
// Consider if specific errors should be thrown based on requirements.
return
{
exists
:
false
};
}
},
);
logger
.
debug
(
"Registered release note IPC handlers"
);
}
src/ipc/ipc_client.ts
浏览文件 @
56900ebe
...
...
@@ -25,6 +25,7 @@ import type {
LanguageModel
,
CreateCustomLanguageModelProviderParams
,
CreateCustomLanguageModelParams
,
DoesReleaseNoteExistParams
,
}
from
"./ipc_types"
;
import
type
{
ProposalResult
}
from
"@/lib/schemas"
;
import
{
showError
}
from
"@/lib/toast"
;
...
...
@@ -736,6 +737,12 @@ export class IpcClient {
return
this
.
ipcRenderer
.
invoke
(
"get-system-platform"
);
}
public
async
doesReleaseNoteExist
(
params
:
DoesReleaseNoteExistParams
,
):
Promise
<
{
exists
:
boolean
;
url
?:
string
}
>
{
return
this
.
ipcRenderer
.
invoke
(
"does-release-note-exist"
,
params
);
}
public
async
getLanguageModelProviders
():
Promise
<
LanguageModelProvider
[]
>
{
return
this
.
ipcRenderer
.
invoke
(
"get-language-model-providers"
);
}
...
...
src/ipc/ipc_host.ts
浏览文件 @
56900ebe
...
...
@@ -15,6 +15,7 @@ import { registerWindowHandlers } from "./handlers/window_handlers";
import
{
registerUploadHandlers
}
from
"./handlers/upload_handlers"
;
import
{
registerVersionHandlers
}
from
"./handlers/version_handlers"
;
import
{
registerLanguageModelHandlers
}
from
"./handlers/language_model_handlers"
;
import
{
registerReleaseNoteHandlers
}
from
"./handlers/release_note_handlers"
;
export
function
registerIpcHandlers
()
{
// Register all IPC handlers by category
...
...
@@ -35,4 +36,5 @@ export function registerIpcHandlers() {
registerUploadHandlers
();
registerVersionHandlers
();
registerLanguageModelHandlers
();
registerReleaseNoteHandlers
();
}
src/ipc/ipc_types.ts
浏览文件 @
56900ebe
...
...
@@ -181,3 +181,7 @@ export interface CreateCustomLanguageModelParams {
maxOutputTokens
?:
number
;
contextWindow
?:
number
;
}
export
interface
DoesReleaseNoteExistParams
{
version
:
string
;
}
src/pages/home.tsx
浏览文件 @
56900ebe
...
...
@@ -58,17 +58,25 @@ export default function HomePage() {
lastShownReleaseNotesVersion
:
appVersion
,
});
// Check if release notes exist for this version
const
url
=
`https://www.dyad.sh/docs/releases/
${
appVersion
}
`
;
const
exists
=
await
checkPageExists
(
url
);
if
(
exists
)
{
setReleaseUrl
(
url
+
"?hideHeader=true&theme="
+
theme
);
setReleaseNotesOpen
(
true
);
try
{
const
result
=
await
IpcClient
.
getInstance
().
doesReleaseNoteExist
({
version
:
appVersion
,
});
if
(
result
.
exists
&&
result
.
url
)
{
setReleaseUrl
(
result
.
url
+
"?hideHeader=true&theme="
+
theme
);
setReleaseNotesOpen
(
true
);
}
}
catch
(
err
)
{
console
.
warn
(
"Unable to check if release note exists for: "
+
appVersion
,
err
,
);
}
}
};
updateLastVersionLaunched
();
},
[
appVersion
,
settings
,
updateSettings
]);
},
[
appVersion
,
settings
,
updateSettings
,
theme
]);
// Get the appId from search params
const
appId
=
search
.
appId
?
Number
(
search
.
appId
)
:
null
;
...
...
@@ -251,15 +259,3 @@ export default function HomePage() {
</
div
>
);
}
function
checkPageExists
(
url
:
string
)
{
return
fetch
(
url
,
{
mode
:
"no-cors"
})
.
then
(()
=>
{
// Promise resolved - resource likely exists
return
true
;
})
.
catch
(()
=>
{
// Promise rejected - resource likely doesn't exist or network error
return
false
;
});
}
src/preload.ts
浏览文件 @
56900ebe
...
...
@@ -68,6 +68,7 @@ const validInvokeChannels = [
"delete-chat"
,
"delete-messages"
,
"start-chat-stream"
,
"does-release-note-exist"
,
]
as
const
;
// Add valid receive channels
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论