Skip to content

Commit de112b6

Browse files
authored
Feature/disable seconds in timer (#80)
* feat: add option to disable seconds in status bar timer * chore: update version to 0.6.6 in package.json
1 parent 5746581 commit de112b6

4 files changed

Lines changed: 56 additions & 9 deletions

File tree

.vscode/settings.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
{
2+
"simpleCodingTimeTracker.inactivityTimeout": 2.5,
3+
"simpleCodingTimeTracker.health.stretchInterval": 100,
4+
"simpleCodingTimeTracker.focusTimeout": 3,
25
"simpleCodingTimeTracker.health.eyeRestInterval": 20,
3-
"simpleCodingTimeTracker.health.stretchInterval": 100,
4-
"simpleCodingTimeTracker.inactivityTimeout": 2.5,
5-
"simpleCodingTimeTracker.focusTimeout": 3
6-
}
6+
"simpleCodingTimeTracker.statusBar.showSeconds": true,
7+
"simpleCodingTimeTracker.health.enableNotifications": false,
8+
"simpleCodingTimeTracker.health.modalNotifications": true,
9+
"simpleCodingTimeTracker.health.breakThreshold": 90
10+
}

package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "simple-coding-time-tracker",
33
"displayName": "Simple Coding Time Tracker",
44
"description": "Track and visualize your coding time across projects",
5-
"version": "0.6.5",
5+
"version": "0.6.6",
66
"publisher": "noorashuvo",
77
"license": "MIT",
88
"icon": "icon-sctt.png",
@@ -34,6 +34,11 @@
3434
"maximum": 60,
3535
"description": "If you switch away from VS Code, continue counting as coding time for up to this many minutes before pausing."
3636
},
37+
"simpleCodingTimeTracker.statusBar.showSeconds": {
38+
"type": "boolean",
39+
"default": true,
40+
"description": "Show seconds in the status bar time display (disable to reduce distractions)"
41+
},
3742
"simpleCodingTimeTracker.health.enableNotifications": {
3843
"type": "boolean",
3944
"default": false,

src/settingsView.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export class SettingsViewProvider {
5757
const settings = {
5858
inactivityTimeout: config.get('inactivityTimeout', 2.5),
5959
focusTimeout: config.get('focusTimeout', 3),
60+
statusBarShowSeconds: config.get('statusBar.showSeconds', true),
6061
healthEnableNotifications: config.get('health.enableNotifications', true),
6162
healthModalNotifications: config.get('health.modalNotifications', true),
6263
healthEyeRestInterval: config.get('health.eyeRestInterval', 20),
@@ -78,6 +79,7 @@ export class SettingsViewProvider {
7879
// Most settings should be saved to Workspace scope (default behavior in package.json)
7980
await config.update('inactivityTimeout', settings.inactivityTimeout, vscode.ConfigurationTarget.Workspace);
8081
await config.update('focusTimeout', settings.focusTimeout, vscode.ConfigurationTarget.Workspace);
82+
await config.update('statusBar.showSeconds', settings.statusBarShowSeconds, vscode.ConfigurationTarget.Workspace);
8183
await config.update('health.enableNotifications', settings.healthEnableNotifications, vscode.ConfigurationTarget.Workspace);
8284
await config.update('health.modalNotifications', settings.healthModalNotifications, vscode.ConfigurationTarget.Workspace);
8385
await config.update('health.eyeRestInterval', settings.healthEyeRestInterval, vscode.ConfigurationTarget.Workspace);
@@ -110,6 +112,7 @@ export class SettingsViewProvider {
110112
// Reset workspace-scoped settings
111113
await config.update('inactivityTimeout', undefined, vscode.ConfigurationTarget.Workspace);
112114
await config.update('focusTimeout', undefined, vscode.ConfigurationTarget.Workspace);
115+
await config.update('statusBar.showSeconds', undefined, vscode.ConfigurationTarget.Workspace);
113116
await config.update('health.enableNotifications', undefined, vscode.ConfigurationTarget.Workspace);
114117
await config.update('health.modalNotifications', undefined, vscode.ConfigurationTarget.Workspace);
115118
await config.update('health.eyeRestInterval', undefined, vscode.ConfigurationTarget.Workspace);
@@ -287,6 +290,18 @@ export class SettingsViewProvider {
287290
</div>
288291
</div>
289292
293+
<div class="setting-group">
294+
<h2>📊 Status Bar Display Settings</h2>
295+
296+
<div class="setting-item">
297+
<div class="checkbox-container">
298+
<input type="checkbox" id="statusBarShowSeconds" />
299+
<label for="statusBarShowSeconds" style="margin: 0;">Show Seconds</label>
300+
</div>
301+
<div class="description">Display seconds in the status bar time (HH:MM:SS). Disable to reduce distractions and show only hours and minutes.</div>
302+
</div>
303+
</div>
304+
290305
<div class="setting-group">
291306
<h2>🔔 Health Notification Settings</h2>
292307
@@ -368,6 +383,7 @@ export class SettingsViewProvider {
368383
function loadSettings(settings) {
369384
document.getElementById('inactivityTimeout').value = settings.inactivityTimeout;
370385
document.getElementById('focusTimeout').value = settings.focusTimeout;
386+
document.getElementById('statusBarShowSeconds').checked = settings.statusBarShowSeconds;
371387
document.getElementById('healthEnableNotifications').checked = settings.healthEnableNotifications;
372388
document.getElementById('healthModalNotifications').checked = settings.healthModalNotifications;
373389
document.getElementById('healthEyeRestInterval').value = settings.healthEyeRestInterval;
@@ -380,6 +396,7 @@ export class SettingsViewProvider {
380396
return {
381397
inactivityTimeout: parseFloat(document.getElementById('inactivityTimeout').value),
382398
focusTimeout: parseFloat(document.getElementById('focusTimeout').value),
399+
statusBarShowSeconds: document.getElementById('statusBarShowSeconds').checked,
383400
healthEnableNotifications: document.getElementById('healthEnableNotifications').checked,
384401
healthModalNotifications: document.getElementById('healthModalNotifications').checked,
385402
healthEyeRestInterval: parseInt(document.getElementById('healthEyeRestInterval').value),

src/statusBar.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export class StatusBar implements vscode.Disposable {
99
private timeTracker: TimeTracker;
1010
private summaryView: SummaryViewProvider;
1111
private updateInterval: NodeJS.Timeout;
12+
private configChangeListener: vscode.Disposable;
1213
private readonly commandId = 'simpleCodingTimeTracker.manualSave';
1314
private readonly notificationCommandId = 'simpleCodingTimeTracker.toggleNotifications';
1415

@@ -50,30 +51,49 @@ export class StatusBar implements vscode.Disposable {
5051
this.notificationItem.backgroundColor = new vscode.ThemeColor('statusBarItem.warningBackground');
5152
this.notificationItem.show();
5253

54+
// Listen for configuration changes to update immediately
55+
this.configChangeListener = vscode.workspace.onDidChangeConfiguration(e => {
56+
if (e.affectsConfiguration('simpleCodingTimeTracker.statusBar') ||
57+
e.affectsConfiguration('simpleCodingTimeTracker.health.enableNotifications')) {
58+
void this.updateStatusBar();
59+
}
60+
});
61+
5362
void this.updateStatusBar();
5463
this.updateInterval = setInterval(() => void this.updateStatusBar(), 1000); // Update every second
5564
} private async updateStatusBar() {
5665
const todayTotal = await this.timeTracker.getTodayTotal();
5766
const currentProjectTime = await this.timeTracker.getCurrentProjectTime();
5867
const isActive = this.timeTracker.isActive();
5968

69+
// Get configuration settings
70+
const config = vscode.workspace.getConfiguration('simpleCodingTimeTracker');
71+
const showSeconds = config.get('statusBar.showSeconds', true);
72+
6073
// Update main status bar (time tracker only)
61-
this.statusBarItem.text = `${isActive ? '💻' : '⏸️'} ${this.formatTime(todayTotal)}`;
74+
const timeDisplay = this.formatTime(todayTotal, showSeconds);
75+
const icon = isActive ? '💻' : '⏸️';
76+
this.statusBarItem.text = `${icon} ${timeDisplay}`;
77+
6278
this.statusBarItem.tooltip = await this.getTooltipText(isActive, currentProjectTime);
6379

6480
// Update notification status bar
65-
const config = vscode.workspace.getConfiguration('simpleCodingTimeTracker');
6681
const notificationsEnabled = config.get('health.enableNotifications', false);
6782
const notificationIcon = notificationsEnabled ? '🔔' : '🔕';
6883
this.notificationItem.text = notificationIcon;
6984
this.notificationItem.tooltip = `Health Notifications: ${notificationsEnabled ? 'ON' : 'OFF'} (Click to toggle)`;
7085
}
7186

72-
private formatTime(minutes: number): string {
87+
private formatTime(minutes: number, showSeconds: boolean = true): string {
7388
const hours = Math.floor(minutes / 60);
7489
const mins = Math.floor(minutes % 60);
7590
const secs = Math.floor((minutes * 60) % 60);
76-
return `${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
91+
92+
if (showSeconds) {
93+
return `${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
94+
} else {
95+
return `${hours.toString().padStart(2, '0')}:${mins.toString().padStart(2, '0')}`;
96+
}
7797
}
7898

7999
private async getTooltipText(isActive: boolean, currentProjectTime: number): Promise<string> {
@@ -124,6 +144,7 @@ Click to save session and show summary`;
124144
dispose() {
125145
this.statusBarItem.dispose();
126146
this.notificationItem.dispose();
147+
this.configChangeListener.dispose();
127148
clearInterval(this.updateInterval);
128149
}
129150
}

0 commit comments

Comments
 (0)