diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx
index a9ddd02..eb07f22 100644
--- a/src/components/Settings.tsx
+++ b/src/components/Settings.tsx
@@ -66,9 +66,33 @@ const Settings: React.FC
= ({ onClose, onAppsChange }) => {
const [settings, setSettings] = useState(DEFAULT_SETTINGS)
const [newApp, setNewApp] = useState({ name: '', imageUrl: '', url: '', useProxy: false })
+ // Тихая авто-детекция логотипа: обновляет imageUrl в state+config когда сервер вернёт URL.
+ // Если детект ничего не нашёл — оставляем пустой imageUrl (тогда отобразится буква-заглушка).
+ const autoDetectLogo = (appUrl: string, onDetected: (logoUrl: string) => void) => {
+ if (!window.electron?.detectLogo) return
+ window.electron.detectLogo(appUrl).then(logoUrl => {
+ if (logoUrl) onDetected(logoUrl)
+ }).catch(() => {})
+ }
+
useEffect(() => {
window.electron?.readConfig().then((cfg: SettingsData | null) => {
- if (cfg?.apps) setSettings(cfg)
+ if (!cfg?.apps) return
+ setSettings(cfg)
+ // Догоняем легаси-приложения без иконки: тихо парсим и обновляем конфиг.
+ const missing = cfg.apps.filter(a => !a.imageUrl && a.url)
+ if (!missing.length) return
+ missing.forEach(target => {
+ autoDetectLogo(target.url, logoUrl => {
+ setSettings(prev => {
+ const apps = prev.apps.map(a => a.url === target.url && !a.imageUrl ? { ...a, imageUrl: logoUrl } : a)
+ const updated = { ...prev, apps }
+ saveSettings(updated)
+ onAppsChange(apps)
+ return updated
+ })
+ })
+ })
})
}, [])
@@ -91,12 +115,23 @@ const Settings: React.FC = ({ onClose, onAppsChange }) => {
const addApp = () => {
if (!newApp.name || !newApp.url) return
- const apps = [...settings.apps, newApp]
+ const fresh: AppEntry = { ...newApp, imageUrl: '' }
+ const apps = [...settings.apps, fresh]
const updated = { ...settings, apps }
setSettings(updated)
saveSettings(updated)
onAppsChange(apps)
setNewApp({ name: '', imageUrl: '', url: '', useProxy: false })
+ // Тихо детектим логотип в фоне; UI получит иконку, когда сервер ответит.
+ autoDetectLogo(fresh.url, logoUrl => {
+ setSettings(prev => {
+ const nextApps = prev.apps.map(a => a.url === fresh.url && !a.imageUrl ? { ...a, imageUrl: logoUrl } : a)
+ const next = { ...prev, apps: nextApps }
+ saveSettings(next)
+ onAppsChange(nextApps)
+ return next
+ })
+ })
}
const removeApp = (index: number) => {
@@ -268,12 +303,6 @@ const Settings: React.FC = ({ onClose, onAppsChange }) => {
value={newApp.url}
onChange={e => setNewApp({ ...newApp, url: e.target.value })}
/>
- setNewApp({ ...newApp, imageUrl: e.target.value })}
- />