diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f56fa59..1fa01d0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: - os: [windows-latest] + os: [windows-latest, macos-latest] steps: - name: Check out Git repository @@ -36,12 +36,12 @@ jobs: curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp.exe -o resources/yt-dlp.exe # Download yt-dlp for macOS (for cross-platform builds) - # curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos -o resources/yt-dlp_macos - # chmod +x resources/yt-dlp_macos + curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_macos -o resources/yt-dlp_macos + chmod +x resources/yt-dlp_macos # Download yt-dlp for Linux (for cross-platform builds) - curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o resources/yt-dlp_linux - chmod +x resources/yt-dlp_linux + # curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o resources/yt-dlp_linux + # chmod +x resources/yt-dlp_linux - name: Lint and format check run: pnpm run check diff --git a/resources/tray-icon.png b/resources/tray-icon.png new file mode 100644 index 0000000..37802eb Binary files /dev/null and b/resources/tray-icon.png differ diff --git a/src/main/tray.ts b/src/main/tray.ts index 5c2e3e9..7b25839 100644 --- a/src/main/tray.ts +++ b/src/main/tray.ts @@ -1,5 +1,6 @@ import { app, BrowserWindow, Menu, nativeImage, Tray } from 'electron' import appIcon from '../../resources/icon.png?asset' +import trayIcon from '../../resources/tray-icon.png?asset' import { settingsManager } from './settings' let tray: Tray | null = null @@ -85,9 +86,17 @@ export function createTray(): void { return } - const trayIcon = nativeImage.createFromPath(appIcon) + // Use 16x16 icon for macOS tray, fallback to app icon for other platforms + const iconPath = process.platform === 'darwin' ? trayIcon : appIcon + const trayIconImage = nativeImage.createFromPath(iconPath) - tray = new Tray(trayIcon) + // For macOS, ensure the icon is properly sized + if (process.platform === 'darwin') { + // Resize to 16x16 for macOS tray + trayIconImage.setTemplateImage(true) + } + + tray = new Tray(trayIconImage) // Set tooltip tray.setToolTip('VidBee') diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 243c65d..9281826 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -3,7 +3,8 @@ import { Sidebar } from '@renderer/components/ui/sidebar' import { Toaster } from '@renderer/components/ui/sonner' import { TitleBar } from '@renderer/components/ui/title-bar' import { ThemeProvider } from 'next-themes' -import { useState } from 'react' +import { useEffect, useState } from 'react' +import { ipcServices } from './lib/ipc' import { About } from './pages/About' import { Home } from './pages/Home' import { Settings } from './pages/Settings' @@ -13,6 +14,22 @@ type Page = 'home' | 'settings' | 'about' | 'sites' function AppContent() { const [currentPage, setCurrentPage] = useState('home') + const [platform, setPlatform] = useState('') + + useEffect(() => { + // Get platform info to determine if we should show title bar + const getPlatform = async () => { + try { + const platformInfo = await ipcServices.app.getPlatform() + setPlatform(platformInfo) + } catch (error) { + console.error('Failed to get platform info:', error) + // Default to showing title bar if platform detection fails + setPlatform('unknown') + } + } + getPlatform() + }, []) const renderPage = () => { switch (currentPage) { @@ -36,8 +53,8 @@ function AppContent() { {/* Main Content */}
- {/* Custom Title Bar */} - + {/* Custom Title Bar - Hide on macOS */} + {platform !== 'darwin' && } { const fileName = `${title}.${format}` // Use proper path joining for cross-platform compatibility - return `${downloadPath}/${fileName}`.replace(/\//g, '\\') + // Handle both forward and backward slashes for cross-platform compatibility + const normalizedDownloadPath = downloadPath.replace(/\\/g, '/') + return `${normalizedDownloadPath}/${fileName}` } interface DownloadItemProps {