mirror of
https://github.com/RedWizardsLab/EchoHub.git
synced 2026-09-06 07:36:01 +02:00
feat: implement notification sound functionality with user customization options
This commit is contained in:
@@ -9,7 +9,7 @@ namespace EchoHub.Client.UI;
|
||||
/// <summary>
|
||||
/// Result returned from the profile edit dialog.
|
||||
/// </summary>
|
||||
public record ProfileEditResult(string? DisplayName, string? Bio, string? NicknameColor, string? AvatarPath);
|
||||
public record ProfileEditResult(string? DisplayName, string? Bio, string? NicknameColor, string? AvatarPath, bool? NotificationSoundEnabled, byte? NotificationVolume);
|
||||
|
||||
/// <summary>
|
||||
/// A Terminal.Gui dialog for editing the user's profile (display name, bio, nickname color).
|
||||
@@ -19,11 +19,11 @@ public sealed class ProfileEditDialog
|
||||
/// <summary>
|
||||
/// Shows the profile edit dialog and returns the result, or null if cancelled.
|
||||
/// </summary>
|
||||
public static ProfileEditResult? Show(IApplication app, string? currentDisplayName, string? currentBio, string? currentColor)
|
||||
public static ProfileEditResult? Show(IApplication app, string? currentDisplayName, string? currentBio, string? currentColor, bool notificationSoundEnabled = false, byte notificationVolume = 30)
|
||||
{
|
||||
ProfileEditResult? result = null;
|
||||
|
||||
var dialog = new Dialog { Title = "Edit Profile", Width = 60, Height = 22 };
|
||||
var dialog = new Dialog { Title = "Edit Profile", Width = 60, Height = 26 };
|
||||
|
||||
// Display Name
|
||||
var nameLabel = new Label
|
||||
@@ -148,20 +148,53 @@ public sealed class ProfileEditDialog
|
||||
}
|
||||
};
|
||||
|
||||
// Notification Sound
|
||||
var notifCheckbox = new CheckBox
|
||||
{
|
||||
Text = "Notification sound on @mention",
|
||||
X = 1,
|
||||
Y = 13,
|
||||
Value = notificationSoundEnabled ? CheckState.Checked : CheckState.UnChecked
|
||||
};
|
||||
|
||||
var volumeLabel = new Label
|
||||
{
|
||||
Text = "Volume:",
|
||||
X = 1,
|
||||
Y = 15
|
||||
};
|
||||
var volumeField = new TextField
|
||||
{
|
||||
Text = notificationVolume.ToString(),
|
||||
X = 17,
|
||||
Y = 15,
|
||||
Width = 6
|
||||
};
|
||||
var volumeHintLabel = new Label
|
||||
{
|
||||
Text = "(0-100)",
|
||||
X = 24,
|
||||
Y = 15
|
||||
};
|
||||
volumeHintLabel.SetScheme(new Scheme
|
||||
{
|
||||
Normal = new Attribute(Color.DarkGray, Color.Blue)
|
||||
});
|
||||
|
||||
// Buttons
|
||||
var saveButton = new Button
|
||||
{
|
||||
Text = "Save",
|
||||
IsDefault = true,
|
||||
X = Pos.Center() - 10,
|
||||
Y = 14
|
||||
Y = 18
|
||||
};
|
||||
|
||||
var cancelButton = new Button
|
||||
{
|
||||
Text = "Cancel",
|
||||
X = Pos.Center() + 5,
|
||||
Y = 14
|
||||
Y = 18
|
||||
};
|
||||
|
||||
saveButton.Accepting += (s, e) =>
|
||||
@@ -171,7 +204,8 @@ public sealed class ProfileEditDialog
|
||||
var nicknameColor = NullIfEmpty(colorField.Text?.Trim());
|
||||
var avatarPath = NullIfEmpty(avatarField.Text?.Trim());
|
||||
|
||||
result = new ProfileEditResult(displayName, bio, nicknameColor, avatarPath);
|
||||
byte? volume = byte.TryParse(volumeField.Text, out var v) ? Math.Min(v, (byte)100) : null;
|
||||
result = new ProfileEditResult(displayName, bio, nicknameColor, avatarPath, notifCheckbox.Value == CheckState.Checked, volume);
|
||||
e.Handled = true;
|
||||
app.RequestStop();
|
||||
};
|
||||
@@ -186,6 +220,7 @@ public sealed class ProfileEditDialog
|
||||
dialog.Add(nameLabel, nameField, bioLabel, bioField, colorLabel, colorField,
|
||||
colorHintLabel, previewLabel, colorPreview,
|
||||
avatarLabel, avatarField, browseButton, avatarHintLabel,
|
||||
notifCheckbox, volumeLabel, volumeField, volumeHintLabel,
|
||||
saveButton, cancelButton);
|
||||
|
||||
nameField.SetFocus();
|
||||
|
||||
Reference in New Issue
Block a user