Skip to content

Commit 23616c7

Browse files
committed
add setting to enable/disable tray timer
1 parent c4a82a2 commit 23616c7

6 files changed

Lines changed: 26 additions & 9 deletions

File tree

src/main/tray.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ function updateTimerInterval(timeEntry: TimeEntry, tray: Tray) {
7171
}
7272

7373
export function registerTrayListeners(tray: Tray, mainWindow: BrowserWindow) {
74-
ipcMain.on('updateTrayState', (_, serializedTimeEntry: string) => {
74+
ipcMain.on('updateTrayState', (_, serializedTimeEntry: string, showTimer: boolean = true) => {
7575
if (serializedTimeEntry) {
7676
const timeEntry = JSON.parse(serializedTimeEntry) as TimeEntry
7777
if (timeEntry && timeEntry.start && timeEntry.start !== '') {
@@ -81,9 +81,13 @@ export function registerTrayListeners(tray: Tray, mainWindow: BrowserWindow) {
8181
clearInterval(timerInterval)
8282
timerInterval = undefined
8383
}
84-
tray.setTitle('')
85-
updateTimerInterval(timeEntry, tray)
86-
timerInterval = setInterval(() => updateTimerInterval(timeEntry, tray), 1000)
84+
if (showTimer) {
85+
tray.setTitle('')
86+
updateTimerInterval(timeEntry, tray)
87+
timerInterval = setInterval(() => updateTimerInterval(timeEntry, tray), 1000)
88+
} else {
89+
tray.setTitle('')
90+
}
8791
tray.setContextMenu(buildMenu(mainWindow, timeEntry))
8892
} else {
8993
if (timerInterval) {

src/preload/interface.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export interface IElectronAPI {
1313
onAutoUpdaterError: (callback: (error: string | undefined) => Promise<void>) => void
1414
onStartTimer: (callback: () => void) => void
1515
onStopTimer: (callback: () => void) => void
16-
updateTrayState: (timeEntry: string) => void
16+
updateTrayState: (timeEntry: string, showTimer: boolean) => void
1717
updateAutoUpdater: () => void
1818
}
1919

src/preload/main.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ if (process.contextIsolated || true) {
2828
ipcRenderer.on('updateNotAvailable', () => callback()),
2929
onAutoUpdaterError: (callback) =>
3030
ipcRenderer.on('updateError', (_event, value) => callback(value)),
31-
updateTrayState: (timeEntry: string) => ipcRenderer.send('updateTrayState', timeEntry),
31+
updateTrayState: (timeEntry: string, showTimer: boolean) =>
32+
ipcRenderer.send('updateTrayState', timeEntry, showTimer),
3233
updateAutoUpdater: () => ipcRenderer.send('updateAutoUpdater'),
3334
})
3435
} catch (error) {

src/renderer/src/components/MainTimeEntryTable.vue

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import { dayjs } from '../utils/dayjs.ts'
4646
import { listenForBackendEvent } from '../utils/events.ts'
4747
import { fromError } from 'zod-validation-error'
4848
import { apiClient } from '../utils/api'
49-
import { updateTrayState } from '../utils/tray'
49+
import { updateTrayState, isTrayTimerActivated } from '../utils/tray'
5050
import { getMe } from '../utils/me'
5151
5252
const { currentOrganizationId, currentMembership } = useMyMemberships()
@@ -173,6 +173,10 @@ watch(currentTimeEntry, () => {
173173
updateTrayState({ ...currentTimeEntry.value })
174174
})
175175
176+
watch(isTrayTimerActivated, () => {
177+
updateTrayState({ ...currentTimeEntry.value })
178+
})
179+
176180
watchEffect(() => {
177181
if (isActive.value) {
178182
startLiveTimer()

src/renderer/src/components/SettingsModal.vue

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { Modal, PrimaryButton, SecondaryButton, Checkbox, LoadingSpinner } from '@solidtime/ui'
33
import { logout } from '../utils/oauth.ts'
44
import { isWidgetActivated } from '../utils/widget.ts'
5+
import { isTrayTimerActivated } from '../utils/tray.ts'
56
import { useQuery, useQueryClient } from '@tanstack/vue-query'
67
import { getMe } from '../utils/me'
78
import { computed, onMounted, ref } from 'vue'
@@ -91,11 +92,15 @@ onMounted(() => {
9192
</div>
9293
<div class="mb-2 mt-6 font-medium text-muted" role="heading">Settings</div>
9394

94-
<div class="my-4 text-sm text-muted flex flex-col justify-center">
95+
<div class="my-4 text-sm text-muted flex flex-col justify-center space-y-3">
9596
<label class="flex items-center">
9697
<Checkbox v-model:checked="isWidgetActivated" name="remember" />
9798
<span class="ms-2 text-sm">Show Timetracker Widget</span>
9899
</label>
100+
<label class="flex items-center">
101+
<Checkbox v-model:checked="isTrayTimerActivated" name="tray_timer" />
102+
<span class="ms-2 text-sm">Show Tray / Menu Bar Timer</span>
103+
</label>
99104
</div>
100105
<div class="mb-2 mt-6 font-medium text-muted" role="heading">Updates</div>
101106
<div class="flex items-center space-x-4">

src/renderer/src/utils/tray.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import { type TimeEntry } from '@solidtime/api'
2+
import { useStorage } from '@vueuse/core'
3+
4+
export const isTrayTimerActivated = useStorage('is_tray_timer_activated', true)
25

36
export async function updateTrayState(timeEntry: TimeEntry) {
4-
window.electronAPI.updateTrayState(JSON.stringify(timeEntry))
7+
window.electronAPI.updateTrayState(JSON.stringify(timeEntry), isTrayTimerActivated.value)
58
}

0 commit comments

Comments
 (0)