chore: refresh app icons

Update the Electron icon wiring to use the new assets/icons layout, remove the old app-icon files, and keep Windows packaging pointed at the new platform-specific ico.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
David Kaya
2026-03-23 21:40:08 +01:00
co-authored by Copilot
parent da72e49f2c
commit 4719ebb9d5
28 changed files with 26 additions and 10 deletions
Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

+3 -3
View File
@@ -11,8 +11,8 @@ const outputDirectoryName = 'win-unpacked';
const scriptDirectory = dirname(fileURLToPath(import.meta.url)); const scriptDirectory = dirname(fileURLToPath(import.meta.url));
const repositoryRoot = resolve(scriptDirectory, '..'); const repositoryRoot = resolve(scriptDirectory, '..');
const assetDirectory = join(repositoryRoot, 'assets'); const assetDirectory = join(repositoryRoot, 'assets');
const windowsIconPath = join(assetDirectory, 'icons', 'app-icon.ico'); const sourceIconPath = join(assetDirectory, 'icons', 'icon.png');
const windowIconPath = join(assetDirectory, 'icons', 'app-icon.png'); const windowsIconPath = join(assetDirectory, 'icons', 'windows', 'icon.ico');
const electronDistributionDirectory = join(repositoryRoot, 'node_modules', 'electron', 'dist'); const electronDistributionDirectory = join(repositoryRoot, 'node_modules', 'electron', 'dist');
const rendererBuildDirectory = join(repositoryRoot, 'dist'); const rendererBuildDirectory = join(repositoryRoot, 'dist');
const electronBuildDirectory = join(repositoryRoot, 'dist-electron'); const electronBuildDirectory = join(repositoryRoot, 'dist-electron');
@@ -94,7 +94,7 @@ async function main() {
await Promise.all([ await Promise.all([
ensurePathExists(assetDirectory, 'Application assets'), ensurePathExists(assetDirectory, 'Application assets'),
ensurePathExists(windowIconPath, 'Window icon'), ensurePathExists(sourceIconPath, 'Source application icon'),
ensurePathExists(windowsIconPath, 'Windows application icon'), ensurePathExists(windowsIconPath, 'Windows application icon'),
ensurePathExists(electronDistributionDirectory, 'Electron runtime'), ensurePathExists(electronDistributionDirectory, 'Electron runtime'),
ensurePathExists(rendererBuildDirectory, 'Renderer build output'), ensurePathExists(rendererBuildDirectory, 'Renderer build output'),
+10 -3
View File
@@ -11,7 +11,14 @@ function getPathModule(platform: NodeJS.Platform) {
export function resolveWindowIconPath(context: WindowIconPathContext): string { export function resolveWindowIconPath(context: WindowIconPathContext): string {
const pathModule = getPathModule(context.platform); const pathModule = getPathModule(context.platform);
const iconFileName = context.platform === 'win32' ? 'app-icon.ico' : 'app-icon.png'; switch (context.platform) {
case 'win32':
return pathModule.join(context.appPath, 'assets', 'icons', iconFileName); return pathModule.join(context.appPath, 'assets', 'icons', 'windows', 'icon.ico');
case 'darwin':
return pathModule.join(context.appPath, 'assets', 'icons', 'macos', 'icon.icns');
case 'linux':
return pathModule.join(context.appPath, 'assets', 'icons', 'linux', 'icons', '512x512.png');
default:
return pathModule.join(context.appPath, 'assets', 'icons', 'icon.png');
}
} }
+13 -4
View File
@@ -3,21 +3,30 @@ import { describe, expect, test } from 'bun:test';
import { resolveWindowIconPath } from '@main/windows/appIcon'; import { resolveWindowIconPath } from '@main/windows/appIcon';
describe('resolveWindowIconPath', () => { describe('resolveWindowIconPath', () => {
test('uses the Windows ico asset from the packaged app assets directory', () => { test('uses the Windows ico asset from the platform-specific icon directory', () => {
expect( expect(
resolveWindowIconPath({ resolveWindowIconPath({
appPath: 'C:\\workspace\\personal\\repositories\\kopaya', appPath: 'C:\\workspace\\personal\\repositories\\kopaya',
platform: 'win32', platform: 'win32',
}), }),
).toBe('C:\\workspace\\personal\\repositories\\kopaya\\assets\\icons\\app-icon.ico'); ).toBe('C:\\workspace\\personal\\repositories\\kopaya\\assets\\icons\\windows\\icon.ico');
}); });
test('uses the PNG asset on non-Windows platforms', () => { test('uses the macOS icns asset on Darwin', () => {
expect( expect(
resolveWindowIconPath({ resolveWindowIconPath({
appPath: '/Applications/Kopaya.app/Contents/Resources/app', appPath: '/Applications/Kopaya.app/Contents/Resources/app',
platform: 'darwin', platform: 'darwin',
}), }),
).toBe('/Applications/Kopaya.app/Contents/Resources/app/assets/icons/app-icon.png'); ).toBe('/Applications/Kopaya.app/Contents/Resources/app/assets/icons/macos/icon.icns');
});
test('uses the Linux 512px PNG asset on Linux', () => {
expect(
resolveWindowIconPath({
appPath: '/opt/kopaya/resources/app',
platform: 'linux',
}),
).toBe('/opt/kopaya/resources/app/assets/icons/linux/icons/512x512.png');
}); });
}); });