From 4fbc4ca4e47973fefb4bbba605c9ca6d45eedb10 Mon Sep 17 00:00:00 2001 From: mshafer1 <2565361+mshafer1@users.noreply.github.com> Date: Fri, 10 Jan 2025 21:05:28 -0600 Subject: [PATCH] add support for still playing the Windows alert sound --- ntfysh_client/MainForm.cs | 7 +++++- ntfysh_client/NotificationDialog.cs | 31 +++++++++++++++++++++++- ntfysh_client/SettingsDialog.Designer.cs | 19 ++++++++++++--- ntfysh_client/SettingsDialog.cs | 6 +++++ ntfysh_client/SettingsDialog.resx | 4 +-- ntfysh_client/SettingsModel.cs | 1 + 6 files changed, 61 insertions(+), 7 deletions(-) diff --git a/ntfysh_client/MainForm.cs b/ntfysh_client/MainForm.cs index c9c6a70..10198ea 100644 --- a/ntfysh_client/MainForm.cs +++ b/ntfysh_client/MainForm.cs @@ -86,7 +86,8 @@ namespace ntfysh_client timeoutSeconds: (int)Program.Settings.Timeout, icon: priorityIcon, showTimeOutBar: Program.Settings.CustomTrayNotificationsShowTimeoutBar, - showInDarkMode: Program.Settings.CustomTrayNotificationsShowInDarkMode + showInDarkMode: Program.Settings.CustomTrayNotificationsShowInDarkMode, + playNotificationSound: Program.Settings.CustomTrayNotificationsPlayDefaultWindowsSound ); } } @@ -156,6 +157,7 @@ namespace ntfysh_client dialog.UseCustomTrayNotifications = Program.Settings.NotificationsMethod == SettingsModel.NotificationsType.CustomTray; dialog.CustomTrayNotificationsShowTimeoutBar = Program.Settings.CustomTrayNotificationsShowTimeoutBar; dialog.CustomTrayNotificationsShowInDarkMode = Program.Settings.CustomTrayNotificationsShowInDarkMode; + dialog.CustomTrayNotificationsPlayDefaultWindowsSound = Program.Settings.CustomTrayNotificationsPlayDefaultWindowsSound; dialog.Timeout = Program.Settings.Timeout; // set timeout last so bounds are setup before setting value //Show dialog @@ -171,6 +173,7 @@ namespace ntfysh_client Program.Settings.NotificationsMethod = (dialog.UseNativeWindowsNotifications)? SettingsModel.NotificationsType.NativeWindows : SettingsModel.NotificationsType.CustomTray; Program.Settings.CustomTrayNotificationsShowTimeoutBar = dialog.CustomTrayNotificationsShowTimeoutBar; Program.Settings.CustomTrayNotificationsShowInDarkMode = dialog.CustomTrayNotificationsShowInDarkMode; + Program.Settings.CustomTrayNotificationsPlayDefaultWindowsSound = dialog.CustomTrayNotificationsPlayDefaultWindowsSound; //Save new settings persistently SaveSettingsToFile(); @@ -330,6 +333,7 @@ namespace ntfysh_client NotificationsMethod = SettingsModel.NotificationsType.NativeWindows, CustomTrayNotificationsShowTimeoutBar = true, CustomTrayNotificationsShowInDarkMode = false, + CustomTrayNotificationsPlayDefaultWindowsSound = true, }; private void MergeSettingsRevisions(SettingsModel older, SettingsModel newer) @@ -347,6 +351,7 @@ namespace ntfysh_client older.NotificationsMethod = newer.NotificationsMethod; older.CustomTrayNotificationsShowTimeoutBar = newer.CustomTrayNotificationsShowTimeoutBar; older.CustomTrayNotificationsShowInDarkMode = newer.CustomTrayNotificationsShowInDarkMode; + older.CustomTrayNotificationsPlayDefaultWindowsSound = newer.CustomTrayNotificationsPlayDefaultWindowsSound; } //Update the revision diff --git a/ntfysh_client/NotificationDialog.cs b/ntfysh_client/NotificationDialog.cs index c27f3db..7f70a8f 100644 --- a/ntfysh_client/NotificationDialog.cs +++ b/ntfysh_client/NotificationDialog.cs @@ -4,6 +4,8 @@ using System.Runtime.InteropServices; using System.Windows.Forms; using System.Diagnostics; using ntfysh_client.Themes; +using Microsoft.Win32; +using System.Media; namespace ntfysh_client @@ -33,7 +35,7 @@ namespace ntfysh_client InitializeWindowHidden(); } - public void ShowNotification(string title, string message, int timeoutSeconds = 0, ToolTipIcon? icon = null, bool showTimeOutBar = true, bool showInDarkMode = true) + public void ShowNotification(string title, string message, int timeoutSeconds = 0, ToolTipIcon? icon = null, bool showTimeOutBar = true, bool showInDarkMode = true, bool playNotificationSound = false) { if (Visible) { @@ -100,6 +102,10 @@ namespace ntfysh_client // ok, show the window Show(); SetWindowPosition(); + if(playNotificationSound) + { + PlayNotificationSound(); + } } private void ApplyTheme() @@ -265,5 +271,28 @@ namespace ntfysh_client _shownStopwatch = null; } } + + private void PlayNotificationSound() + { + bool found = false; + try + { + using RegistryKey? key = Registry.CurrentUser.OpenSubKey(@"AppEvents\Schemes\Apps\.Default\Notification.Default\.Current"); + if (key != null) + { + Object? o = key.GetValue(null); // pass null to get (Default) + if (o != null) + { + SoundPlayer theSound = new SoundPlayer((String)o); + theSound.Play(); + found = true; + } + } + } + catch + { } + if (!found) + SystemSounds.Beep.Play(); // consolation prize + } } } diff --git a/ntfysh_client/SettingsDialog.Designer.cs b/ntfysh_client/SettingsDialog.Designer.cs index 157b765..428625a 100644 --- a/ntfysh_client/SettingsDialog.Designer.cs +++ b/ntfysh_client/SettingsDialog.Designer.cs @@ -42,6 +42,7 @@ namespace ntfysh_client useCustomTrayNotifications = new System.Windows.Forms.RadioButton(); useNativeWindowsNotifications = new System.Windows.Forms.RadioButton(); groupCustomNotificationSettings = new System.Windows.Forms.GroupBox(); + customNotificationsPlayWindowsNotificationAudio = new System.Windows.Forms.CheckBox(); customNotificationsShowInDarkMode = new System.Windows.Forms.CheckBox(); customNotificationsShowTimeoutBar = new System.Windows.Forms.CheckBox(); label1 = new System.Windows.Forms.Label(); @@ -59,7 +60,7 @@ namespace ntfysh_client buttonPanel.Controls.Add(cancelButton); buttonPanel.Controls.Add(saveButton); buttonPanel.Dock = System.Windows.Forms.DockStyle.Bottom; - buttonPanel.Location = new System.Drawing.Point(0, 316); + buttonPanel.Location = new System.Drawing.Point(0, 336); buttonPanel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); buttonPanel.Name = "buttonPanel"; buttonPanel.Size = new System.Drawing.Size(531, 51); @@ -174,14 +175,25 @@ namespace ntfysh_client // // groupCustomNotificationSettings // + groupCustomNotificationSettings.Controls.Add(customNotificationsPlayWindowsNotificationAudio); groupCustomNotificationSettings.Controls.Add(customNotificationsShowInDarkMode); groupCustomNotificationSettings.Controls.Add(customNotificationsShowTimeoutBar); groupCustomNotificationSettings.Location = new System.Drawing.Point(12, 243); groupCustomNotificationSettings.Name = "groupCustomNotificationSettings"; - groupCustomNotificationSettings.Size = new System.Drawing.Size(504, 67); + groupCustomNotificationSettings.Size = new System.Drawing.Size(504, 87); groupCustomNotificationSettings.TabIndex = 10; groupCustomNotificationSettings.TabStop = false; // + // customNotificationsPlayWindowsNotificationAudio + // + customNotificationsPlayWindowsNotificationAudio.AutoSize = true; + customNotificationsPlayWindowsNotificationAudio.Location = new System.Drawing.Point(4, 59); + customNotificationsPlayWindowsNotificationAudio.Name = "customNotificationsPlayWindowsNotificationAudio"; + customNotificationsPlayWindowsNotificationAudio.Size = new System.Drawing.Size(200, 19); + customNotificationsPlayWindowsNotificationAudio.TabIndex = 2; + customNotificationsPlayWindowsNotificationAudio.Text = "Play Windows notification sound"; + customNotificationsPlayWindowsNotificationAudio.UseVisualStyleBackColor = true; + // // customNotificationsShowInDarkMode // customNotificationsShowInDarkMode.AutoSize = true; @@ -216,7 +228,7 @@ namespace ntfysh_client AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; BackColor = System.Drawing.Color.White; - ClientSize = new System.Drawing.Size(531, 367); + ClientSize = new System.Drawing.Size(531, 387); Controls.Add(label1); Controls.Add(groupCustomNotificationSettings); Controls.Add(nativeVersusCustomNotificationsGroupBox); @@ -266,5 +278,6 @@ namespace ntfysh_client private System.Windows.Forms.CheckBox customNotificationsShowTimeoutBar; private System.Windows.Forms.CheckBox customNotificationsShowInDarkMode; private System.Windows.Forms.Label label1; + private System.Windows.Forms.CheckBox customNotificationsPlayWindowsNotificationAudio; } } \ No newline at end of file diff --git a/ntfysh_client/SettingsDialog.cs b/ntfysh_client/SettingsDialog.cs index 20cbfa2..2d4d0ec 100644 --- a/ntfysh_client/SettingsDialog.cs +++ b/ntfysh_client/SettingsDialog.cs @@ -61,6 +61,12 @@ namespace ntfysh_client get => customNotificationsShowInDarkMode.Checked; set => customNotificationsShowInDarkMode.Checked = value; } + + public bool CustomTrayNotificationsPlayDefaultWindowsSound + { + get => customNotificationsPlayWindowsNotificationAudio.Checked; + set => customNotificationsPlayWindowsNotificationAudio.Checked = value; + } #endregion public SettingsDialog() diff --git a/ntfysh_client/SettingsDialog.resx b/ntfysh_client/SettingsDialog.resx index af32865..8b2ff64 100644 --- a/ntfysh_client/SettingsDialog.resx +++ b/ntfysh_client/SettingsDialog.resx @@ -1,7 +1,7 @@