Compare commits

..

2 Commits

Author SHA1 Message Date
Nexmoe
c2bda907e0 Default auto-launch at login 2025-12-19 18:06:38 +08:00
Nexmoe
41f40b6e71 Use icon tabs with tooltips (#38)
* feat: icon tabs with tooltips

* chore: add conductor config
2025-12-19 18:03:03 +08:00
4 changed files with 49 additions and 10 deletions

6
conductor.json Normal file
View File

@@ -0,0 +1,6 @@
{
"scripts": {
"setup": "cp $CONDUCTOR_ROOT_PATH/resources/ resources/ && pnpm install",
"run": "pnpm run dev"
}
}

View File

@@ -44,7 +44,7 @@ subscriptionManager.on('subscriptions:updated', (subscriptions) => {
mainWindow?.webContents.send('subscriptions:updated', subscriptions)
})
export function createWindow(): void {
export function createWindow(startHidden = false): void {
const isMac = process.platform === 'darwin'
const isWindows = process.platform === 'win32'
@@ -86,6 +86,9 @@ export function createWindow(): void {
})
mainWindow.on('ready-to-show', () => {
if (startHidden) {
return
}
mainWindow?.show()
})
@@ -298,10 +301,19 @@ app.whenReady().then(async () => {
log.error('Failed to initialize yt-dlp:', error)
}
if (!settingsManager.get('launchAtLogin')) {
settingsManager.set('launchAtLogin', true)
}
applyDockVisibility(settingsManager.get('hideDockIcon'))
applyAutoLaunchSetting(settingsManager.get('launchAtLogin'))
createWindow()
const loginItemSettings = app.getLoginItemSettings()
const startHidden =
settingsManager.get('launchAtLogin') &&
(loginItemSettings.wasOpenedAtLogin || loginItemSettings.wasOpenedAsHidden)
createWindow(startHidden)
initAutoUpdater()

View File

@@ -16,10 +16,11 @@ import {
SelectValue
} from '@renderer/components/ui/select'
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@renderer/components/ui/tabs'
import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip'
import { popularSites } from '@renderer/data/popularSites'
import type { AppSettings, OneClickQualityPreset, PlaylistInfo } from '@shared/types'
import { useAtom, useSetAtom } from 'jotai'
import { AlertCircle, Download, Loader2, Search } from 'lucide-react'
import { AlertCircle, Download, List, Loader2, Play, Search } from 'lucide-react'
import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react'
import { useTranslation } from 'react-i18next'
import { toast } from 'sonner'
@@ -569,12 +570,32 @@ export function Home({ onOpenSupportedSites, onOpenSettings }: HomeProps) {
</CardDescription>
</div>
<TabsList className="grid grid-cols-2">
<TabsTrigger value="single" className="flex items-center gap-2">
{t('download.singleVideo')}
</TabsTrigger>
<TabsTrigger value="playlist" className="flex items-center gap-2">
{t('playlist.title')}
</TabsTrigger>
<Tooltip>
<TooltipTrigger asChild>
<TabsTrigger
value="single"
aria-label={t('download.singleVideo')}
className="flex items-center justify-center data-[state=inactive]:text-muted-foreground data-[state=active]:bg-primary/10 data-[state=active]:text-primary"
>
<Play className="h-4 w-4" />
<span className="sr-only">{t('download.singleVideo')}</span>
</TabsTrigger>
</TooltipTrigger>
<TooltipContent side="bottom">{t('download.singleVideo')}</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<TabsTrigger
value="playlist"
aria-label={t('playlist.title')}
className="flex items-center justify-center data-[state=inactive]:text-muted-foreground data-[state=active]:bg-primary/10 data-[state=active]:text-primary"
>
<List className="h-4 w-4" />
<span className="sr-only">{t('playlist.title')}</span>
</TabsTrigger>
</TooltipTrigger>
<TooltipContent side="bottom">{t('playlist.title')}</TooltipContent>
</Tooltip>
</TabsList>
</div>
</CardHeader>

View File

@@ -289,7 +289,7 @@ export const defaultSettings: AppSettings = {
oneClickQuality: 'best',
closeToTray: false,
hideDockIcon: false,
launchAtLogin: false,
launchAtLogin: true,
autoUpdate: true,
subscriptionFilenameTemplate: '%(uploader)s - %(title)s.%(ext)s',
subscriptionOnlyLatestDefault: true,