mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-07-17 11:07:11 +08:00
fix(desktop): correct electron-updater import for commonjs
This commit is contained in:
@@ -55,6 +55,15 @@
|
|||||||
{
|
{
|
||||||
"from": "build/dist/cowagent-backend",
|
"from": "build/dist/cowagent-backend",
|
||||||
"to": "backend/cowagent-backend"
|
"to": "backend/cowagent-backend"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"from": "resources",
|
||||||
|
"to": ".",
|
||||||
|
"filter": [
|
||||||
|
"icon.png",
|
||||||
|
"trayTemplate.png",
|
||||||
|
"trayTemplate@2x.png"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"mac": {
|
"mac": {
|
||||||
|
|||||||
@@ -43,6 +43,16 @@ function getIconPath(ext: string = 'png'): string | undefined {
|
|||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Resolve the optional monochrome macOS menu-bar template icon. Returns
|
||||||
|
// undefined when the asset isn't present, so the tray falls back gracefully.
|
||||||
|
function getTrayTemplatePath(): string | undefined {
|
||||||
|
const file = 'trayTemplate.png'
|
||||||
|
const p = isDev
|
||||||
|
? path.resolve(__dirname, '../../resources', file)
|
||||||
|
: path.join(process.resourcesPath, file)
|
||||||
|
return fs.existsSync(p) ? p : undefined
|
||||||
|
}
|
||||||
|
|
||||||
const isMac = process.platform === 'darwin'
|
const isMac = process.platform === 'darwin'
|
||||||
const isWin = process.platform === 'win32'
|
const isWin = process.platform === 'win32'
|
||||||
|
|
||||||
@@ -258,6 +268,9 @@ app.whenReady().then(async () => {
|
|||||||
createTray({
|
createTray({
|
||||||
getWindow: () => mainWindow,
|
getWindow: () => mainWindow,
|
||||||
iconPath: getIconPath('png'),
|
iconPath: getIconPath('png'),
|
||||||
|
// Monochrome menu-bar icon for macOS; falls back to the colored icon when
|
||||||
|
// the template asset is absent (see createTray).
|
||||||
|
templateIconPath: getTrayTemplatePath(),
|
||||||
onQuit: () => {
|
onQuit: () => {
|
||||||
isQuitting = true
|
isQuitting = true
|
||||||
app.quit()
|
app.quit()
|
||||||
|
|||||||
@@ -4,23 +4,33 @@ let tray: Tray | null = null
|
|||||||
|
|
||||||
interface TrayDeps {
|
interface TrayDeps {
|
||||||
getWindow: () => BrowserWindow | null
|
getWindow: () => BrowserWindow | null
|
||||||
|
// Colored icon used on Windows/Linux trays.
|
||||||
iconPath?: string
|
iconPath?: string
|
||||||
|
// Monochrome (black + alpha) template icon for the macOS menu bar; renders
|
||||||
|
// correctly in both light and dark menu bars when set as a template image.
|
||||||
|
templateIconPath?: string
|
||||||
// Called when the user picks "Quit" so the app can fully exit.
|
// Called when the user picks "Quit" so the app can fully exit.
|
||||||
onQuit: () => void
|
onQuit: () => void
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build a system tray icon with a minimal menu. The tray lets users restore the
|
// Build a system tray icon with a minimal menu. The tray lets users restore the
|
||||||
// window after closing it to the background and start a new chat quickly.
|
// window after closing it to the background and start a new chat quickly.
|
||||||
export function createTray({ getWindow, iconPath, onQuit }: TrayDeps): Tray | null {
|
export function createTray({ getWindow, iconPath, templateIconPath, onQuit }: TrayDeps): Tray | null {
|
||||||
if (tray) return tray
|
if (tray) return tray
|
||||||
if (!iconPath) return null
|
|
||||||
|
|
||||||
let image = nativeImage.createFromPath(iconPath)
|
const isMac = process.platform === 'darwin'
|
||||||
|
// Prefer the monochrome template icon on macOS (menu-bar convention).
|
||||||
|
const sourcePath = isMac && templateIconPath ? templateIconPath : iconPath
|
||||||
|
if (!sourcePath) return null
|
||||||
|
|
||||||
|
let image = nativeImage.createFromPath(sourcePath)
|
||||||
if (image.isEmpty()) return null
|
if (image.isEmpty()) return null
|
||||||
// Tray icons render small; resize to avoid an oversized image on some platforms.
|
// Tray icons render small; resize to avoid an oversized image on some platforms.
|
||||||
image = image.resize({ width: 18, height: 18 })
|
image = image.resize({ width: 18, height: 18 })
|
||||||
// macOS renders template images correctly in both light/dark menubars.
|
// A template image must be pure black + alpha; macOS then auto-inverts it for
|
||||||
if (process.platform === 'darwin') image.setTemplateImage(false)
|
// light/dark menu bars. Only mark it as such when we actually loaded the
|
||||||
|
// dedicated template asset (a colored icon as template would render as a blob).
|
||||||
|
if (isMac && templateIconPath) image.setTemplateImage(true)
|
||||||
|
|
||||||
tray = new Tray(image)
|
tray = new Tray(image)
|
||||||
tray.setToolTip(app.name)
|
tray.setToolTip(app.name)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import { app, BrowserWindow } from 'electron'
|
import { app, BrowserWindow } from 'electron'
|
||||||
import pkg from 'electron-updater'
|
// electron-updater is CommonJS: its members live on module.exports, with no
|
||||||
|
// meaningful default export. Under module=commonjs + esModuleInterop, a named
|
||||||
// electron-updater ships as CommonJS; grab autoUpdater from the default export.
|
// import compiles to `electron_updater_1.autoUpdater` and resolves correctly,
|
||||||
const { autoUpdater } = pkg
|
// whereas `import pkg from 'electron-updater'` yields undefined.
|
||||||
|
import { autoUpdater } from 'electron-updater'
|
||||||
|
|
||||||
// Status payloads pushed to the renderer over the 'update-status' channel.
|
// Status payloads pushed to the renderer over the 'update-status' channel.
|
||||||
// The renderer drives the NavRail badge + update panel from these.
|
// The renderer drives the NavRail badge + update panel from these.
|
||||||
|
|||||||
Reference in New Issue
Block a user