Skip to content

Commit acb487b

Browse files
committed
added start ,minimized setting
1 parent 8a70c4f commit acb487b

File tree

6 files changed

+60
-9
lines changed

6 files changed

+60
-9
lines changed

DeskThingServer/src/main/lifecycle/appLifecycle.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { closeLoadingWindow, buildMainWindow } from '../windows/windowManager'
1111
import { nextTick } from 'node:process'
1212
import { updateLoadingStatus } from '@server/windows/loadingWindow'
1313
import { join } from 'node:path'
14+
import { checkFlag } from './lifecycleCheck'
1415

1516
/**
1617
* Initialize the application lifecycle
@@ -35,20 +36,28 @@ export async function initializeAppLifecycle(): Promise<void> {
3536
optimizer.watchWindowShortcuts(window)
3637
})
3738

39+
const startMinimized = await checkFlag('server_startMinimized')
3840
// Create main window after loading is complete
39-
const mainWindow = buildMainWindow()
41+
if (!startMinimized) {
42+
await updateLoadingStatus('Creating main window')
43+
const mainWindow = buildMainWindow()
44+
mainWindow.once('ready-to-show', async () => {
45+
await updateLoadingStatus('Finishing Up...')
46+
closeLoadingWindow()
47+
mainWindow.show()
48+
})
49+
}
4050

4151
// Load modules and set up IPC handlers
4252
nextTick(async () => {
4353
await setupIpcHandlers()
4454
await loadModules()
45-
await updateLoadingStatus('Creating main window')
46-
})
47-
48-
mainWindow.once('ready-to-show', async () => {
49-
await updateLoadingStatus('Finishing Up...')
50-
closeLoadingWindow()
51-
mainWindow.show()
55+
if (startMinimized) {
56+
await updateLoadingStatus('Start Minimized: TRUE')
57+
setTimeout(() => {
58+
closeLoadingWindow() // ensure the loading window is closed
59+
}, 3000)
60+
}
5261
})
5362

5463
app.on('before-quit', async () => {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
import { updateLoadingStatus } from '@server/windows/loadingWindow'
3+
import { Settings } from '@shared/types'
4+
import { app } from 'electron'
5+
import { readFile } from 'fs/promises'
6+
import { join } from 'path'
7+
8+
export const checkFlag = async (flagKey: keyof Settings): Promise<boolean> => {
9+
const settingsPath = join(app.getPath('userData'), 'settings.json')
10+
11+
updateLoadingStatus(`Checking flag: ${flagKey}`)
12+
try {
13+
const settings = JSON.parse(await readFile(settingsPath, 'utf-8')) as Settings
14+
return settings?.[flagKey] === true
15+
} catch (error) {
16+
updateLoadingStatus('Settings file not found', error)
17+
return false
18+
}
19+
}

DeskThingServer/src/main/static/defaultSettings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export const defaultSettings: Settings = {
77
// server
88
server_LogLevel: LOG_FILTER.INFO,
99
server_autoStart: false,
10+
server_startMinimized: false,
1011
server_minimizeApp: true,
1112
server_localIp: getLocalIpAddresses(),
1213
server_callbackPort: 8888,

DeskThingServer/src/renderer/src/overlays/settings/ServerSettings.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ const ServerSettings: React.FC = () => {
111111
className="w-full"
112112
onChange={(selected) => {
113113
const selectedValue = selected as SingleValue<SettingOption>
114-
handleSettingChange('server_LogLevel', selectedValue?.value as LOG_FILTER || LOG_FILTER.INFO)
114+
handleSettingChange(
115+
'server_LogLevel',
116+
(selectedValue?.value as LOG_FILTER) || LOG_FILTER.INFO
117+
)
115118
}}
116119
/>
117120
</div>
@@ -129,6 +132,22 @@ const ServerSettings: React.FC = () => {
129132
/>
130133
</Button>
131134
</div>
135+
<div className="w-full px-4 flex justify-between items-center">
136+
<h2 className="text-xl">Start Minimized</h2>
137+
<Button
138+
title="Will start DeskThing minimized"
139+
className="bg-transparent p-0"
140+
onClick={() =>
141+
handleSettingChange('server_startMinimized', !settings.server_startMinimized)
142+
}
143+
>
144+
<IconToggle
145+
iconSize={48}
146+
checked={settings.server_startMinimized}
147+
className={`transition-color ${settings.server_startMinimized ? 'text-green-500' : 'text-gray-500'}`}
148+
/>
149+
</Button>
150+
</div>
132151
<div className="border-t py-5 border-gray-900 w-full flex justify-end">
133152
<Button
134153
className={`border-green-500 border group gap-2 ${loading ? 'text-gray-100 bg-green-600' : 'hover:bg-green-500'}`}

DeskThingServer/src/renderer/src/stores/settingsStore.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const useSettingsStore = create<SettingsStoreState>((set, get) => ({
2626
server_LogLevel: LOG_FILTER.INFO,
2727
server_autoStart: true,
2828
server_minimizeApp: true,
29+
server_startMinimized: false,
2930
server_localIp: ['-.-.-.-'],
3031
server_callbackPort: -1,
3132
device_devicePort: -1,

DeskThingServer/src/shared/types/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ export type Settings = {
1515
// server
1616
server_LogLevel: LOG_FILTER
1717
server_autoStart: boolean
18+
/** Whether it should minimize to taskbar OR close on window close */
1819
server_minimizeApp: boolean
20+
server_startMinimized: boolean
1921
server_localIp: string[]
2022
server_callbackPort: number
2123
// device

0 commit comments

Comments
 (0)