Skip to content

Commit 33fa322

Browse files
Copilotrnwood
andauthored
feat: add auto-view new messages setting (#1843)
* Initial plan * feat: add auto-view new messages setting Co-authored-by: rnwood <[email protected]> --------- Co-authored-by: copilot-swe-agent[bot] <[email protected]> Co-authored-by: rnwood <[email protected]>
1 parent 29ad865 commit 33fa322

6 files changed

Lines changed: 34 additions & 2 deletions

File tree

Rnwood.Smtp4dev/ApiModel/ClientSettings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
public class ClientSettings
44
{
55
public int PageSize { get; set; }
6+
public bool AutoViewNewMessages { get; set; }
67
}
78
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
export default class ClientSettings {
2-
constructor(pageSize: number) {
2+
constructor(pageSize: number, autoViewNewMessages: boolean = false) {
33
this.pageSize = pageSize;
4+
this.autoViewNewMessages = autoViewNewMessages;
45
}
56

67
pageSize: number;
8+
autoViewNewMessages: boolean;
79
}

Rnwood.Smtp4dev/ClientApp/src/MessageNotificationManager.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ export default class MessageNotificationManager {
2121

2222
refresh = debounce(this.refreshInternal, 500);
2323

24+
private get autoViewNewMessages(): boolean {
25+
const stored = window.localStorage.getItem("auto-view-new-messages");
26+
return stored === "true";
27+
}
28+
2429
async refreshInternal(suppressNotifications: boolean) {
2530

2631
if (!this.mailboxName) {
@@ -36,6 +41,11 @@ export default class MessageNotificationManager {
3641
this.unnotifiedMessages = messagesToAdd.concat(this.unnotifiedMessages);
3742
this.lastNotifiedMessage = this.unnotifiedMessages[0];
3843

44+
// Auto-view the latest message if the setting is enabled
45+
if (!suppressNotifications && this.autoViewNewMessages) {
46+
this.onClick(this.unnotifiedMessages[0]);
47+
}
48+
3949
if (!suppressNotifications && Notification.permission == "granted") {
4050
if (this.visibleNotificationCloseTimeout) {
4151
clearTimeout(this.visibleNotificationCloseTimeout);

Rnwood.Smtp4dev/ClientApp/src/components/settingsdialog.vue

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@
7474

7575
<el-switch v-model="server.disableHtmlCompatibilityCheck" :disabled="server.lockedSettings.disableHtmlCompatibilityCheck" />
7676
</el-form-item>
77+
78+
<el-form-item label="Auto view new messages as they arrive">
79+
<el-switch v-model="autoViewNewMessages" />
80+
</el-form-item>
7781
</el-tab-pane>
7882
<el-tab-pane label="SMTP Server">
7983

@@ -475,6 +479,15 @@
475479
}
476480
}
477481
482+
get autoViewNewMessages(): boolean {
483+
const stored = window.localStorage.getItem("auto-view-new-messages");
484+
return stored === "true";
485+
}
486+
487+
set autoViewNewMessages(value: boolean) {
488+
window.localStorage.setItem("auto-view-new-messages", value.toString());
489+
}
490+
478491
async save() {
479492
this.saving = true;
480493
this.error = null;

Rnwood.Smtp4dev/Controllers/ClientSettingsController.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public ApiModel.ClientSettings Get()
2727
var clientProps = clientOptions.Value;
2828
return new ApiModel.ClientSettings
2929
{
30-
PageSize = clientProps.PageSize
30+
PageSize = clientProps.PageSize,
31+
AutoViewNewMessages = clientProps.AutoViewNewMessages
3132
};
3233
}
3334
}

Rnwood.Smtp4dev/Server/Settings/ClientOptions.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,10 @@ public record ClientOptions
66
/// Page size for message pagination
77
/// </summary>
88
public int PageSize { get; set; } = 25;
9+
10+
/// <summary>
11+
/// Whether to automatically view new messages as they arrive
12+
/// </summary>
13+
public bool AutoViewNewMessages { get; set; } = false;
914
}
1015
}

0 commit comments

Comments
 (0)