更新弹窗自动过滤下载字段

This commit is contained in:
cc
2026-03-21 15:17:41 +08:00
parent f3fc5760fc
commit a179f13031
2 changed files with 64 additions and 3 deletions

View File

@@ -122,6 +122,67 @@ let isDownloadInProgress = false
let downloadProgressHandler: ((progress: any) => void) | null = null let downloadProgressHandler: ((progress: any) => void) | null = null
let downloadedHandler: (() => void) | null = null let downloadedHandler: (() => void) | null = null
const normalizeReleaseNotes = (rawReleaseNotes: unknown): string => {
const merged = (() => {
if (typeof rawReleaseNotes === 'string') {
return rawReleaseNotes
}
if (Array.isArray(rawReleaseNotes)) {
return rawReleaseNotes
.map((item) => {
if (!item || typeof item !== 'object') return ''
const note = (item as { note?: unknown }).note
return typeof note === 'string' ? note : ''
})
.filter(Boolean)
.join('\n\n')
}
return ''
})()
if (!merged.trim()) return ''
// 兼容 electron-updater 直接返回 HTML 的场景
const removeDownloadSectionFromHtml = (input: string): string => {
return input.replace(
/<h[1-6][^>]*>\s*(?:下载|download)\s*<\/h[1-6]>\s*[\s\S]*?(?=<h[1-6]\b|$)/gi,
''
)
}
// 兼容 Markdown 场景Action 最终 release note 模板)
const removeDownloadSectionFromMarkdown = (input: string): string => {
const lines = input.split(/\r?\n/)
const output: string[] = []
let skipDownloadSection = false
for (const line of lines) {
const headingMatch = line.match(/^\s*#{1,6}\s*(.+?)\s*$/)
if (headingMatch) {
const heading = headingMatch[1].trim().toLowerCase()
if (heading === '下载' || heading === 'download') {
skipDownloadSection = true
continue
}
if (skipDownloadSection) {
skipDownloadSection = false
}
}
if (!skipDownloadSection) {
output.push(line)
}
}
return output.join('\n')
}
const cleaned = removeDownloadSectionFromMarkdown(removeDownloadSectionFromHtml(merged))
.replace(/\n{3,}/g, '\n\n')
.trim()
return cleaned
}
type AnnualReportYearsLoadStrategy = 'cache' | 'native' | 'hybrid' type AnnualReportYearsLoadStrategy = 'cache' | 'native' | 'hybrid'
type AnnualReportYearsLoadPhase = 'cache' | 'native' | 'scan' | 'done' type AnnualReportYearsLoadPhase = 'cache' | 'native' | 'scan' | 'done'
@@ -1121,7 +1182,7 @@ function registerIpcHandlers() {
return { return {
hasUpdate: true, hasUpdate: true,
version: latestVersion, version: latestVersion,
releaseNotes: result.updateInfo.releaseNotes as string || '' releaseNotes: normalizeReleaseNotes(result.updateInfo.releaseNotes)
} }
} }
} }
@@ -2574,7 +2635,7 @@ function checkForUpdatesOnStartup() {
// 通知渲染进程有新版本 // 通知渲染进程有新版本
mainWindow.webContents.send('app:updateAvailable', { mainWindow.webContents.send('app:updateAvailable', {
version: latestVersion, version: latestVersion,
releaseNotes: result.updateInfo.releaseNotes || '' releaseNotes: normalizeReleaseNotes(result.updateInfo.releaseNotes)
}) })
} }
} }

View File

@@ -155,8 +155,8 @@ function getModulePath(resourcesDir, appOutDir, platform) {
if (!filename) return null; if (!filename) return null;
const direct = findFirstExisting([ const direct = findFirstExisting([
path.join(resourcesDir, filename),
path.join(resourcesDir, 'resources', filename), path.join(resourcesDir, 'resources', filename),
path.join(resourcesDir, filename),
]); ]);
if (direct) return direct; if (direct) return direct;