diff --git a/ntfysh_client/MainForm.Designer.cs b/ntfysh_client/MainForm.Designer.cs index 7961c23..0f9d1ad 100644 --- a/ntfysh_client/MainForm.Designer.cs +++ b/ntfysh_client/MainForm.Designer.cs @@ -29,209 +29,219 @@ namespace ntfysh_client /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); + components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - this.subscribeNewTopic = new System.Windows.Forms.Button(); - this.removeSelectedTopics = new System.Windows.Forms.Button(); - this.notificationTopics = new System.Windows.Forms.ListBox(); - this.notifyIcon = new System.Windows.Forms.NotifyIcon(this.components); - this.trayContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); - this.showControlWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exitToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.ntfyshWebsiteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); - this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.label1 = new System.Windows.Forms.Label(); - this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.trayContextMenu.SuspendLayout(); - this.menuStrip1.SuspendLayout(); - this.SuspendLayout(); + subscribeNewTopic = new System.Windows.Forms.Button(); + removeSelectedTopics = new System.Windows.Forms.Button(); + notificationTopics = new System.Windows.Forms.ListBox(); + topicContextMenu = new System.Windows.Forms.ContextMenuStrip(components); + sendNotificationMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + notifyIcon = new System.Windows.Forms.NotifyIcon(components); + trayContextMenu = new System.Windows.Forms.ContextMenuStrip(components); + showControlWindowToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + menuStrip1 = new System.Windows.Forms.MenuStrip(); + fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + exitToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + ntfyshWebsiteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); + aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + label1 = new System.Windows.Forms.Label(); + toolTip = new System.Windows.Forms.ToolTip(components); + topicContextMenu.SuspendLayout(); + trayContextMenu.SuspendLayout(); + menuStrip1.SuspendLayout(); + SuspendLayout(); // // subscribeNewTopic // - this.subscribeNewTopic.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.subscribeNewTopic.Location = new System.Drawing.Point(211, 251); - this.subscribeNewTopic.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.subscribeNewTopic.Name = "subscribeNewTopic"; - this.subscribeNewTopic.Size = new System.Drawing.Size(188, 27); - this.subscribeNewTopic.TabIndex = 2; - this.subscribeNewTopic.Text = "Add"; - this.subscribeNewTopic.UseVisualStyleBackColor = true; - this.subscribeNewTopic.Click += new System.EventHandler(this.subscribeNewTopic_Click); + subscribeNewTopic.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + subscribeNewTopic.Location = new System.Drawing.Point(211, 251); + subscribeNewTopic.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + subscribeNewTopic.Name = "subscribeNewTopic"; + subscribeNewTopic.Size = new System.Drawing.Size(188, 27); + subscribeNewTopic.TabIndex = 2; + subscribeNewTopic.Text = "Add"; + subscribeNewTopic.UseVisualStyleBackColor = true; + subscribeNewTopic.Click += subscribeNewTopic_Click; // // removeSelectedTopics // - this.removeSelectedTopics.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.removeSelectedTopics.Enabled = false; - this.removeSelectedTopics.Location = new System.Drawing.Point(13, 251); - this.removeSelectedTopics.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.removeSelectedTopics.Name = "removeSelectedTopics"; - this.removeSelectedTopics.Size = new System.Drawing.Size(188, 27); - this.removeSelectedTopics.TabIndex = 0; - this.removeSelectedTopics.Text = "Remove selected"; - this.removeSelectedTopics.UseVisualStyleBackColor = true; - this.removeSelectedTopics.Click += new System.EventHandler(this.removeSelectedTopics_Click); + removeSelectedTopics.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + removeSelectedTopics.Enabled = false; + removeSelectedTopics.Location = new System.Drawing.Point(13, 251); + removeSelectedTopics.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + removeSelectedTopics.Name = "removeSelectedTopics"; + removeSelectedTopics.Size = new System.Drawing.Size(188, 27); + removeSelectedTopics.TabIndex = 0; + removeSelectedTopics.Text = "Remove selected"; + removeSelectedTopics.UseVisualStyleBackColor = true; + removeSelectedTopics.Click += removeSelectedTopics_Click; // // notificationTopics // - this.notificationTopics.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.notificationTopics.FormattingEnabled = true; - this.notificationTopics.ItemHeight = 15; - this.notificationTopics.Location = new System.Drawing.Point(13, 46); - this.notificationTopics.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.notificationTopics.Name = "notificationTopics"; - this.notificationTopics.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; - this.notificationTopics.Size = new System.Drawing.Size(386, 199); - this.notificationTopics.TabIndex = 3; - this.notificationTopics.Click += new System.EventHandler(this.notificationTopics_Click); - this.notificationTopics.SelectedValueChanged += new System.EventHandler(this.notificationTopics_SelectedValueChanged); + notificationTopics.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + notificationTopics.ContextMenuStrip = topicContextMenu; + notificationTopics.FormattingEnabled = true; + notificationTopics.ItemHeight = 15; + notificationTopics.Location = new System.Drawing.Point(13, 46); + notificationTopics.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + notificationTopics.Name = "notificationTopics"; + notificationTopics.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; + notificationTopics.Size = new System.Drawing.Size(386, 199); + notificationTopics.TabIndex = 3; + toolTip.SetToolTip(notificationTopics, "Double click topic to send message"); + notificationTopics.Click += notificationTopics_Click; + notificationTopics.SelectedValueChanged += notificationTopics_SelectedValueChanged; + notificationTopics.MouseDoubleClick += notificationTopics_MouseDoubleClick; + // + // topicContextMenu + // + topicContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { sendNotificationMenuItem }); + topicContextMenu.Name = "topicContextMenu"; + topicContextMenu.Size = new System.Drawing.Size(167, 26); + // + // sendNotificationMenuItem + // + sendNotificationMenuItem.Name = "sendNotificationMenuItem"; + sendNotificationMenuItem.Size = new System.Drawing.Size(166, 22); + sendNotificationMenuItem.Text = "Send Notification"; + sendNotificationMenuItem.Click += SendNotificationMenuItem_Click; // // notifyIcon // - this.notifyIcon.ContextMenuStrip = this.trayContextMenu; - this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); - this.notifyIcon.Text = "ntfy.sh"; - this.notifyIcon.Visible = true; - this.notifyIcon.Click += new System.EventHandler(this.notifyIcon_Click); + notifyIcon.ContextMenuStrip = trayContextMenu; + notifyIcon.Icon = (System.Drawing.Icon)resources.GetObject("notifyIcon.Icon"); + notifyIcon.Text = "ntfy.sh"; + notifyIcon.Visible = true; + notifyIcon.Click += notifyIcon_Click; // // trayContextMenu // - this.trayContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.showControlWindowToolStripMenuItem, - this.exitToolStripMenuItem}); - this.trayContextMenu.Name = "trayContextMenu"; - this.trayContextMenu.Size = new System.Drawing.Size(190, 48); + trayContextMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { showControlWindowToolStripMenuItem, exitToolStripMenuItem }); + trayContextMenu.Name = "trayContextMenu"; + trayContextMenu.Size = new System.Drawing.Size(190, 48); // // showControlWindowToolStripMenuItem // - this.showControlWindowToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("showControlWindowToolStripMenuItem.Image"))); - this.showControlWindowToolStripMenuItem.Name = "showControlWindowToolStripMenuItem"; - this.showControlWindowToolStripMenuItem.Size = new System.Drawing.Size(189, 22); - this.showControlWindowToolStripMenuItem.Text = "Show control window"; - this.showControlWindowToolStripMenuItem.Click += new System.EventHandler(this.showControlWindowToolStripMenuItem_Click); + showControlWindowToolStripMenuItem.Image = (System.Drawing.Image)resources.GetObject("showControlWindowToolStripMenuItem.Image"); + showControlWindowToolStripMenuItem.Name = "showControlWindowToolStripMenuItem"; + showControlWindowToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + showControlWindowToolStripMenuItem.Text = "Show control window"; + showControlWindowToolStripMenuItem.Click += showControlWindowToolStripMenuItem_Click; // // exitToolStripMenuItem // - this.exitToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("exitToolStripMenuItem.Image"))); - this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; - this.exitToolStripMenuItem.Size = new System.Drawing.Size(189, 22); - this.exitToolStripMenuItem.Text = "Exit"; - this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + exitToolStripMenuItem.Image = (System.Drawing.Image)resources.GetObject("exitToolStripMenuItem.Image"); + exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + exitToolStripMenuItem.Size = new System.Drawing.Size(189, 22); + exitToolStripMenuItem.Text = "Exit"; + exitToolStripMenuItem.Click += exitToolStripMenuItem_Click; // // menuStrip1 // - this.menuStrip1.BackColor = System.Drawing.Color.White; - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.fileToolStripMenuItem, - this.helpToolStripMenuItem}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2); - this.menuStrip1.Size = new System.Drawing.Size(412, 24); - this.menuStrip1.TabIndex = 4; - this.menuStrip1.Text = "menuStrip1"; + menuStrip1.BackColor = System.Drawing.Color.White; + menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { fileToolStripMenuItem, helpToolStripMenuItem }); + menuStrip1.Location = new System.Drawing.Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2); + menuStrip1.Size = new System.Drawing.Size(412, 24); + menuStrip1.TabIndex = 4; + menuStrip1.Text = "menuStrip1"; // // fileToolStripMenuItem // - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.exitToolStripMenuItem1, - this.settingsToolStripMenuItem}); - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); - this.fileToolStripMenuItem.Text = "File"; + fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { exitToolStripMenuItem1, settingsToolStripMenuItem }); + fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + fileToolStripMenuItem.Text = "File"; // // exitToolStripMenuItem1 // - this.exitToolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("exitToolStripMenuItem1.Image"))); - this.exitToolStripMenuItem1.Name = "exitToolStripMenuItem1"; - this.exitToolStripMenuItem1.Size = new System.Drawing.Size(180, 22); - this.exitToolStripMenuItem1.Text = "Exit"; - this.exitToolStripMenuItem1.Click += new System.EventHandler(this.exitToolStripMenuItem1_Click); - // - // helpToolStripMenuItem - // - this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.ntfyshWebsiteToolStripMenuItem, - this.toolStripMenuItem1, - this.aboutToolStripMenuItem}); - this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; - this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); - this.helpToolStripMenuItem.Text = "Help"; - // - // ntfyshWebsiteToolStripMenuItem - // - this.ntfyshWebsiteToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("ntfyshWebsiteToolStripMenuItem.Image"))); - this.ntfyshWebsiteToolStripMenuItem.Name = "ntfyshWebsiteToolStripMenuItem"; - this.ntfyshWebsiteToolStripMenuItem.Size = new System.Drawing.Size(185, 22); - this.ntfyshWebsiteToolStripMenuItem.Text = "Open ntfy.sh website"; - this.ntfyshWebsiteToolStripMenuItem.Click += new System.EventHandler(this.ntfyshWebsiteToolStripMenuItem_Click); - // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(182, 6); - // - // aboutToolStripMenuItem - // - this.aboutToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("aboutToolStripMenuItem.Image"))); - this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - this.aboutToolStripMenuItem.Size = new System.Drawing.Size(185, 22); - this.aboutToolStripMenuItem.Text = "About"; - this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(13, 27); - this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(170, 15); - this.label1.TabIndex = 1; - this.label1.Text = "Subscribed Notification Topics:"; + exitToolStripMenuItem1.Image = (System.Drawing.Image)resources.GetObject("exitToolStripMenuItem1.Image"); + exitToolStripMenuItem1.Name = "exitToolStripMenuItem1"; + exitToolStripMenuItem1.Size = new System.Drawing.Size(116, 22); + exitToolStripMenuItem1.Text = "Exit"; + exitToolStripMenuItem1.Click += exitToolStripMenuItem1_Click; // // settingsToolStripMenuItem // - this.settingsToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("settingsToolStripMenuItem.Image"))); - this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; - this.settingsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); - this.settingsToolStripMenuItem.Text = "Settings"; - this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click); + settingsToolStripMenuItem.Image = (System.Drawing.Image)resources.GetObject("settingsToolStripMenuItem.Image"); + settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; + settingsToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + settingsToolStripMenuItem.Text = "Settings"; + settingsToolStripMenuItem.Click += settingsToolStripMenuItem_Click; + // + // helpToolStripMenuItem + // + helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { ntfyshWebsiteToolStripMenuItem, toolStripMenuItem1, aboutToolStripMenuItem }); + helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + helpToolStripMenuItem.Text = "Help"; + // + // ntfyshWebsiteToolStripMenuItem + // + ntfyshWebsiteToolStripMenuItem.Image = (System.Drawing.Image)resources.GetObject("ntfyshWebsiteToolStripMenuItem.Image"); + ntfyshWebsiteToolStripMenuItem.Name = "ntfyshWebsiteToolStripMenuItem"; + ntfyshWebsiteToolStripMenuItem.Size = new System.Drawing.Size(185, 22); + ntfyshWebsiteToolStripMenuItem.Text = "Open ntfy.sh website"; + ntfyshWebsiteToolStripMenuItem.Click += ntfyshWebsiteToolStripMenuItem_Click; + // + // toolStripMenuItem1 + // + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new System.Drawing.Size(182, 6); + // + // aboutToolStripMenuItem + // + aboutToolStripMenuItem.Image = (System.Drawing.Image)resources.GetObject("aboutToolStripMenuItem.Image"); + aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + aboutToolStripMenuItem.Size = new System.Drawing.Size(185, 22); + aboutToolStripMenuItem.Text = "About"; + aboutToolStripMenuItem.Click += aboutToolStripMenuItem_Click; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(13, 27); + label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(171, 15); + label1.TabIndex = 1; + label1.Text = "Subscribed Notification Topics:"; // // MainForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.BackColor = System.Drawing.Color.White; - this.ClientSize = new System.Drawing.Size(412, 288); - this.Controls.Add(this.menuStrip1); - this.Controls.Add(this.notificationTopics); - this.Controls.Add(this.removeSelectedTopics); - this.Controls.Add(this.subscribeNewTopic); - this.Controls.Add(this.label1); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.KeyPreview = true; - this.MainMenuStrip = this.menuStrip1; - this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "MainForm"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "ntfy.sh"; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); - this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.MainForm_FormClosed); - this.Load += new System.EventHandler(this.MainForm_Load); - this.trayContextMenu.ResumeLayout(false); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + BackColor = System.Drawing.Color.White; + ClientSize = new System.Drawing.Size(412, 288); + Controls.Add(menuStrip1); + Controls.Add(notificationTopics); + Controls.Add(removeSelectedTopics); + Controls.Add(subscribeNewTopic); + Controls.Add(label1); + FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + KeyPreview = true; + MainMenuStrip = menuStrip1; + Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + MaximizeBox = false; + MinimizeBox = false; + Name = "MainForm"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + Text = "ntfy.sh"; + FormClosing += MainForm_FormClosing; + FormClosed += MainForm_FormClosed; + Load += MainForm_Load; + topicContextMenu.ResumeLayout(false); + trayContextMenu.ResumeLayout(false); + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ResumeLayout(false); + PerformLayout(); } #endregion @@ -251,6 +261,9 @@ namespace ntfysh_client private System.Windows.Forms.ToolStripMenuItem ntfyshWebsiteToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem settingsToolStripMenuItem; + private System.Windows.Forms.ContextMenuStrip topicContextMenu; + private System.Windows.Forms.ToolStripMenuItem sendNotificationMenuItem; + private System.Windows.Forms.ToolTip toolTip; } } diff --git a/ntfysh_client/MainForm.cs b/ntfysh_client/MainForm.cs index cc2cdfa..8e8a8cc 100644 --- a/ntfysh_client/MainForm.cs +++ b/ntfysh_client/MainForm.cs @@ -4,7 +4,9 @@ using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; +using System.Net.Http; using System.Reflection; +using System.Threading.Tasks; using System.Windows.Forms; using Newtonsoft.Json; using ntfysh_client.Notifications; @@ -24,10 +26,10 @@ namespace ntfysh_client _notificationListener.OnNotificationReceive += OnNotificationReceive; _notificationListener.OnConnectionMultiAttemptFailure += OnConnectionMultiAttemptFailure; _notificationListener.OnConnectionCredentialsFailure += OnConnectionCredentialsFailure; - + InitializeComponent(); } - + private void MainForm_Load(object sender, EventArgs e) { LoadSettings(); @@ -39,7 +41,7 @@ namespace ntfysh_client if (_startInTray) { _startInTray = false; - + /* * TODO This little workaround prevents the window from appearing with a flash, but the taskbar icon appears for a moment. * @@ -49,10 +51,10 @@ namespace ntfysh_client base.SetVisibleCore(true); base.SetVisibleCore(false); Opacity = 1; - + return; } - + base.SetVisibleCore(value); } @@ -69,7 +71,7 @@ namespace ntfysh_client }; string finalTitle = string.IsNullOrWhiteSpace(e.Title) ? $"{e.Sender.TopicId}@{e.Sender.ServerUrl}" : e.Title; - + notifyIcon.ShowBalloonTip((int)TimeSpan.FromSeconds((double)Program.Settings.Timeout).TotalMilliseconds, finalTitle, e.Message, priorityIcon); } @@ -77,11 +79,11 @@ namespace ntfysh_client { MessageBox.Show($"Connecting to topic ID '{topic.TopicId}' on server '{topic.ServerUrl}' failed after multiple attempts.\n\nThis topic ID will be ignored and you will not receive notifications for it until you restart the application.", "Connection Failure", MessageBoxButtons.OK, MessageBoxIcon.Error); } - + private void OnConnectionCredentialsFailure(NotificationListener sender, SubscribedTopic topic) { string reason = string.IsNullOrWhiteSpace(topic.Username) ? "credentials are required but were not provided" : "the entered credentials are incorrect"; - + MessageBox.Show($"Connecting to topic ID '{topic.TopicId}' on server '{topic.ServerUrl}' failed because {reason}.\n\nThis topic ID will be ignored and you will not receive notifications for it until you correct the credentials.", "Connection Authentication Failure", MessageBoxButtons.OK, MessageBoxIcon.Error); } @@ -92,11 +94,11 @@ namespace ntfysh_client //Do not subscribe on cancelled dialog if (result != DialogResult.OK) return; - + //Convert the reconnection values to ints int reconnectAttempts = Convert.ToInt32(Math.Ceiling(Program.Settings.ReconnectAttempts)); int reconnectAttemptDelay = Convert.ToInt32(Math.Ceiling(Program.Settings.ReconnectAttemptDelay)); - + //Subscribe if (dialog.UseWebsockets) { @@ -109,7 +111,7 @@ namespace ntfysh_client //Add to the user visible list notificationTopics.Items.Add(dialog.Unique); - + //Save the topics persistently SaveTopicsToFile(); } @@ -119,14 +121,14 @@ namespace ntfysh_client while (notificationTopics.SelectedIndex > -1) { string topicUniqueString = (string)notificationTopics.Items[notificationTopics.SelectedIndex]; - + await _notificationListener.UnsubscribeFromTopicAsync(topicUniqueString); notificationTopics.Items.Remove(topicUniqueString); } SaveTopicsToFile(); } - + private void settingsToolStripMenuItem_Click(object sender, EventArgs e) { using SettingsDialog dialog = new(); @@ -135,7 +137,7 @@ namespace ntfysh_client dialog.Timeout = Program.Settings.Timeout; dialog.ReconnectAttempts = Program.Settings.ReconnectAttempts; dialog.ReconnectAttemptDelay = Program.Settings.ReconnectAttemptDelay; - + //Show dialog DialogResult result = dialog.ShowDialog(); @@ -146,7 +148,7 @@ namespace ntfysh_client Program.Settings.Timeout = dialog.Timeout; Program.Settings.ReconnectAttempts = dialog.ReconnectAttempts; Program.Settings.ReconnectAttemptDelay = dialog.ReconnectAttemptDelay; - + //Save new settings persistently SaveSettingsToFile(); } @@ -167,9 +169,9 @@ namespace ntfysh_client private void notifyIcon_Click(object sender, EventArgs e) { MouseEventArgs mouseEv = (MouseEventArgs)e; - + if (mouseEv.Button != MouseButtons.Left) return; - + Visible = !Visible; BringToFront(); } @@ -185,7 +187,7 @@ namespace ntfysh_client string binaryDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new InvalidOperationException("Unable to determine path for application"); return Path.Combine(binaryDirectory ?? throw new InvalidOperationException("Unable to determine path for topics file"), "topics.json"); } - + private string GetLegacyTopicsFilePath() { string binaryDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new InvalidOperationException("Unable to determine path for application"); @@ -195,20 +197,20 @@ namespace ntfysh_client private void SaveTopicsToFile() { string topicsSerialised = JsonConvert.SerializeObject(_notificationListener.SubscribedTopicsByUnique.Select(st => st.Value).ToList(), Formatting.Indented); - + File.WriteAllText(GetTopicsFilePath(), topicsSerialised); } - + private string GetSettingsFilePath() { string binaryDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new InvalidOperationException("Unable to determine path for application"); return Path.Combine(binaryDirectory ?? throw new InvalidOperationException("Unable to determine path for settings file"), "settings.json"); } - + private void SaveSettingsToFile() { string settingsSerialised = JsonConvert.SerializeObject(Program.Settings, Formatting.Indented); - + File.WriteAllText(GetSettingsFilePath(), settingsSerialised); } @@ -222,7 +224,7 @@ namespace ntfysh_client { //Read old format List legacyTopics = new List(); - + using (StreamReader reader = new StreamReader(legacyTopicsPath)) { while (!reader.EndOfStream) @@ -236,17 +238,17 @@ namespace ntfysh_client List newTopics = legacyTopics.Select(lt => new SubscribedTopic(lt, "https://ntfy.sh", null, null)).ToList(); string newFormatSerialised = JsonConvert.SerializeObject(newTopics, Formatting.Indented); - + //Write new format File.WriteAllText(topicsFilePath, newFormatSerialised); - + //Delete old format File.Delete(legacyTopicsPath); } - + //Check if we have any topics file on disk to load if (!File.Exists(topicsFilePath)) return; - + //We have a topics file. Load it! string topicsSerialised = File.ReadAllText(topicsFilePath); @@ -266,32 +268,32 @@ namespace ntfysh_client //TODO Deserialise error! return; } - + //Convert the reconnection values to ints int reconnectAttempts = Convert.ToInt32(Math.Ceiling(Program.Settings.ReconnectAttempts)); int reconnectAttemptDelay = Convert.ToInt32(Math.Ceiling(Program.Settings.ReconnectAttemptDelay)); - + //Load them in foreach (SubscribedTopic topic in topics) { string[] parts = topic.ServerUrl.Split("://", 2); - + switch (parts[0].ToLower()) { case "ws": case "wss": _notificationListener.SubscribeToTopicUsingWebsocket($"{topic.TopicId}@{topic.ServerUrl}", topic.TopicId, topic.ServerUrl, topic.Username, topic.Password, reconnectAttempts, reconnectAttemptDelay); break; - + case "http": case "https": _notificationListener.SubscribeToTopicUsingLongHttpJson($"{topic.TopicId}@{topic.ServerUrl}", topic.TopicId, topic.ServerUrl, topic.Username, topic.Password, reconnectAttempts, reconnectAttemptDelay); break; - + default: continue; } - + notificationTopics.Items.Add($"{topic.TopicId}@{topic.ServerUrl}"); } } @@ -303,7 +305,7 @@ namespace ntfysh_client ReconnectAttempts = 10, ReconnectAttemptDelay = 3 }; - + private void MergeSettingsRevisions(SettingsModel older, SettingsModel newer) { //Apply settings introduced in Revision 1 @@ -321,12 +323,12 @@ namespace ntfysh_client { string settingsFilePath = GetSettingsFilePath(); SettingsModel defaultSettings = GetDefaultSettings(); - + //Check if we have any settings file on disk to load. If we don't, initialise defaults if (!File.Exists(settingsFilePath)) { Program.Settings = defaultSettings; - + SaveSettingsToFile(); return; @@ -339,7 +341,7 @@ namespace ntfysh_client if (string.IsNullOrWhiteSpace(settingsSerialised)) { Program.Settings = defaultSettings; - + SaveSettingsToFile(); return; @@ -352,14 +354,14 @@ namespace ntfysh_client if (settings is null) { Program.Settings = defaultSettings; - + SaveSettingsToFile(); return; } - + Program.Settings = settings; - + //Check the settings revision. If it is older than the current latest revision, apply the settings defaults missing from previous revision if (Program.Settings.Revision < defaultSettings.ReconnectAttempts) { @@ -372,14 +374,14 @@ namespace ntfysh_client { notifyIcon.Dispose(); } - + private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { // Let it close if (_trueExit) return; if (e.CloseReason != CloseReason.UserClosing) return; - + Visible = false; e.Cancel = true; } @@ -409,5 +411,32 @@ namespace ntfysh_client _trueExit = true; Close(); } + + private async void SendNotificationMenuItem_Click(object sender, System.EventArgs e) + { + await SendMessage(); + } + + private async void notificationTopics_MouseDoubleClick(object sender, MouseEventArgs e) + { + await SendMessage(); + } + + private async Task SendMessage() + { + if (notificationTopics.SelectedItem != null && string.IsNullOrEmpty(notificationTopics.SelectedItem as string) == false) + { + var dlg = new SendMessageForm(); + var r = dlg.ShowDialog(this); + if (r == DialogResult.OK) + { + var topicAndHost = notificationTopics.SelectedItem.ToString()?.Split("@"); + var topic = topicAndHost[0]; + var host = topicAndHost[1].Replace("wss", "https"); + var msg = dlg.Message; + await _notificationListener.SendNotification(host, new NtfyEvent { Topic = topic, Title = dlg.Title, Message = msg }); + } + } + } } } diff --git a/ntfysh_client/MainForm.resx b/ntfysh_client/MainForm.resx index ceabbf2..41a6834 100644 --- a/ntfysh_client/MainForm.resx +++ b/ntfysh_client/MainForm.resx @@ -1,4 +1,64 @@ - + + + @@ -57,6 +117,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 384, 17 + + + 537, 17 + 17, 17 @@ -67,19 +133,19 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA68AAAOvAGVvHJJAAAAiklE - QVQ4T8WPQQqAIBBFvUOrXIhu3dcZOkqtu5R1ia4SdRDrxyyGGKmBIOGBDL6nmk9WCGE9yUpW0q9Ads7V - GuCQ/kHAe79joAEO6dcLFmttpQEO6c+Bvpm2oZ0zwB4zVQBiF8cIsMdMDPCb+G2vA/wgP/z6C6WAhBgo - fUFCDGi4BxIGShLpvy5jDoPes/0oNG3VAAAAAElFTkSuQmCC + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA68AAAOvAGVvHJJAAAAgElE + QVQ4T2NgoAZQVFR8oKio+J9E/ADZgP9ycnKSpGCQHuoZoKCg8BiLE/FikB5kF+yXkpISJgWD9BBtQIbp + ykeZZqv+gzCITbIBII0eWsVaIAxi4zQA2SZk24g2AFkhsmKivYDLAGwYqwG4vIANYzWAFIxuwAqQAIl4 + BdyAAQUAg96z/bGuwC8AAAAASUVORK5CYII= iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA68AAAOvAGVvHJJAAAAgUlE - QVQ4T2OgGjjOLq4AZeIFWNWBBI9yib06zC3uABXCCkDyIHVYDTnMI2pzhEvs5VFucSeoEAo4wiNii08e - DHAZQshwFICumCTNMADyK1gTl2gJiCYUNlgBSDPQ1v8gGipEPKDIBRSFAa6oIsoQQvGM1xCqpESsglgA - seroBRgYAOoOWBJbfVcRAAAAAElFTkSuQmCC + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA68AAAOvAGVvHJJAAAAhklE + QVQ4T2NgoBY4zi6ugC6GDWBVBxI8yiX26jC3uAO6HDIAyYPUYTXkMI+ozREusZdHucWd0OVA4AiPiC0+ + eTDAZQgucawAXTE6nygA8itYE5doCYgmFDZYAUjzUW7x/yAaXY4goMgF6H5G5+MFuKKKKENwaYYBvIZQ + JSViFcQCiFVHPwAA6g5YEuFUY5cAAAAASUVORK5CYII= @@ -267,43 +333,43 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAA68AAAOvAGVvHJJAAAAgUlE - QVQ4T2OgGjjOLq4AZeIFWNWBBI9yib06zC3uABXCCkDyIHVYDTnMI2pzhEvs5VFucSeoEAo4wiNii08e - DHAZQshwFICumCTNMADyK1gTl2gJiCYUNlgBSDPQ1v8gGipEPKDIBRSFAa6oIsoQQvGM1xCqpESsglgA - seroBRgYAOoOWBJbfVcRAAAAAElFTkSuQmCC + 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 + PjJp3oK/zgOq9oYvURh7ngAAAABJRU5ErkJggg== diff --git a/ntfysh_client/Notifications/NotificationListener.cs b/ntfysh_client/Notifications/NotificationListener.cs index cf0e99c..5561f84 100644 --- a/ntfysh_client/Notifications/NotificationListener.cs +++ b/ntfysh_client/Notifications/NotificationListener.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; +using System.Net.Http.Json; using System.Net.WebSockets; using System.Text; using System.Threading; @@ -350,5 +351,11 @@ namespace ntfysh_client.Notifications //Remove the old topic SubscribedTopicsByUnique.Remove(topicUniqueString); } + + public async Task SendNotification(string host, NtfyEvent message) + { + var httpClient = new HttpClient(); + return await httpClient.PostAsJsonAsync(host, message); + } } } diff --git a/ntfysh_client/SendMessageForm.Designer.cs b/ntfysh_client/SendMessageForm.Designer.cs new file mode 100644 index 0000000..ba0294a --- /dev/null +++ b/ntfysh_client/SendMessageForm.Designer.cs @@ -0,0 +1,108 @@ +namespace ntfysh_client +{ + partial class SendMessageForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + richTextBox = new System.Windows.Forms.RichTextBox(); + button2 = new System.Windows.Forms.Button(); + textBox = new System.Windows.Forms.TextBox(); + label1 = new System.Windows.Forms.Label(); + label2 = new System.Windows.Forms.Label(); + SuspendLayout(); + // + // richTextBox + // + richTextBox.Location = new System.Drawing.Point(12, 71); + richTextBox.Name = "richTextBox"; + richTextBox.Size = new System.Drawing.Size(365, 165); + richTextBox.TabIndex = 0; + richTextBox.Text = ""; + // + // button2 + // + button2.Location = new System.Drawing.Point(302, 242); + button2.Name = "button2"; + button2.Size = new System.Drawing.Size(75, 23); + button2.TabIndex = 2; + button2.Text = "Send"; + button2.UseVisualStyleBackColor = true; + button2.Click += button2_Click; + // + // textBox + // + textBox.Location = new System.Drawing.Point(12, 27); + textBox.Name = "textBox"; + textBox.Size = new System.Drawing.Size(365, 23); + textBox.TabIndex = 3; + // + // label1 + // + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(12, 53); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(56, 15); + label1.TabIndex = 4; + label1.Text = "Message:"; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(12, 9); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(33, 15); + label2.TabIndex = 5; + label2.Text = "Title:"; + // + // SendMessageForm + // + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(389, 277); + Controls.Add(label2); + Controls.Add(label1); + Controls.Add(textBox); + Controls.Add(button2); + Controls.Add(richTextBox); + FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + MaximizeBox = false; + MinimizeBox = false; + Name = "SendMessageForm"; + Text = "SendMessageForm"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.TextBox textBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} \ No newline at end of file diff --git a/ntfysh_client/SendMessageForm.cs b/ntfysh_client/SendMessageForm.cs new file mode 100644 index 0000000..6b0dd41 --- /dev/null +++ b/ntfysh_client/SendMessageForm.cs @@ -0,0 +1,21 @@ +using System.Windows.Forms; + +namespace ntfysh_client +{ + public partial class SendMessageForm : Form + { + public string Message => richTextBox.Text; + public string Title => textBox.Text; + + public SendMessageForm() + { + InitializeComponent(); + } + + private void button2_Click(object sender, System.EventArgs e) + { + DialogResult = DialogResult.OK; + Close(); + } + } +} diff --git a/ntfysh_client/SendMessageForm.resx b/ntfysh_client/SendMessageForm.resx new file mode 100644 index 0000000..8b2ff64 --- /dev/null +++ b/ntfysh_client/SendMessageForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file