Removed an issue of it flickering that title name and any of the labels also removed scrolling and the marquee function as it wasn't working as originally intended
This commit is contained in:
Generated
+33
-26
@@ -74,9 +74,9 @@
|
|||||||
this.toolStripStatusLabel2,
|
this.toolStripStatusLabel2,
|
||||||
this.toolStripStatusLabel4,
|
this.toolStripStatusLabel4,
|
||||||
this.toolStripStatusLabel3});
|
this.toolStripStatusLabel3});
|
||||||
this.statusStrip1.Location = new System.Drawing.Point(0, 362);
|
this.statusStrip1.Location = new System.Drawing.Point(0, 309);
|
||||||
this.statusStrip1.Name = "statusStrip1";
|
this.statusStrip1.Name = "statusStrip1";
|
||||||
this.statusStrip1.Size = new System.Drawing.Size(612, 26);
|
this.statusStrip1.Size = new System.Drawing.Size(780, 26);
|
||||||
this.statusStrip1.TabIndex = 0;
|
this.statusStrip1.TabIndex = 0;
|
||||||
this.statusStrip1.Text = "statusStrip1";
|
this.statusStrip1.Text = "statusStrip1";
|
||||||
//
|
//
|
||||||
@@ -99,7 +99,7 @@
|
|||||||
//
|
//
|
||||||
this.toolStripStatusLabel4.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.toolStripStatusLabel4.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.toolStripStatusLabel4.Name = "toolStripStatusLabel4";
|
this.toolStripStatusLabel4.Name = "toolStripStatusLabel4";
|
||||||
this.toolStripStatusLabel4.Size = new System.Drawing.Size(260, 21);
|
this.toolStripStatusLabel4.Size = new System.Drawing.Size(344, 21);
|
||||||
this.toolStripStatusLabel4.Spring = true;
|
this.toolStripStatusLabel4.Spring = true;
|
||||||
this.toolStripStatusLabel4.Text = "Profile:";
|
this.toolStripStatusLabel4.Text = "Profile:";
|
||||||
this.toolStripStatusLabel4.Click += new System.EventHandler(this.toolStripStatusLabel4_Click);
|
this.toolStripStatusLabel4.Click += new System.EventHandler(this.toolStripStatusLabel4_Click);
|
||||||
@@ -107,7 +107,7 @@
|
|||||||
// toolStripStatusLabel3
|
// toolStripStatusLabel3
|
||||||
//
|
//
|
||||||
this.toolStripStatusLabel3.Name = "toolStripStatusLabel3";
|
this.toolStripStatusLabel3.Name = "toolStripStatusLabel3";
|
||||||
this.toolStripStatusLabel3.Size = new System.Drawing.Size(260, 21);
|
this.toolStripStatusLabel3.Size = new System.Drawing.Size(344, 21);
|
||||||
this.toolStripStatusLabel3.Spring = true;
|
this.toolStripStatusLabel3.Spring = true;
|
||||||
this.toolStripStatusLabel3.Text = "Song Changed Updateing";
|
this.toolStripStatusLabel3.Text = "Song Changed Updateing";
|
||||||
this.toolStripStatusLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
this.toolStripStatusLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
|
||||||
@@ -119,7 +119,7 @@
|
|||||||
this.aboutToolStripMenuItem});
|
this.aboutToolStripMenuItem});
|
||||||
this.menuStrip2.Location = new System.Drawing.Point(0, 0);
|
this.menuStrip2.Location = new System.Drawing.Point(0, 0);
|
||||||
this.menuStrip2.Name = "menuStrip2";
|
this.menuStrip2.Name = "menuStrip2";
|
||||||
this.menuStrip2.Size = new System.Drawing.Size(612, 25);
|
this.menuStrip2.Size = new System.Drawing.Size(780, 25);
|
||||||
this.menuStrip2.TabIndex = 2;
|
this.menuStrip2.TabIndex = 2;
|
||||||
this.menuStrip2.Text = "menuStrip2";
|
this.menuStrip2.Text = "menuStrip2";
|
||||||
//
|
//
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.groupBox1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.groupBox1.Location = new System.Drawing.Point(199, 37);
|
this.groupBox1.Location = new System.Drawing.Point(199, 37);
|
||||||
this.groupBox1.Name = "groupBox1";
|
this.groupBox1.Name = "groupBox1";
|
||||||
this.groupBox1.Size = new System.Drawing.Size(390, 205);
|
this.groupBox1.Size = new System.Drawing.Size(569, 205);
|
||||||
this.groupBox1.TabIndex = 4;
|
this.groupBox1.TabIndex = 4;
|
||||||
this.groupBox1.TabStop = false;
|
this.groupBox1.TabStop = false;
|
||||||
this.groupBox1.Text = "Song Info";
|
this.groupBox1.Text = "Song Info";
|
||||||
@@ -200,9 +200,9 @@
|
|||||||
// time_data_label
|
// time_data_label
|
||||||
//
|
//
|
||||||
this.time_data_label.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.time_data_label.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.time_data_label.Location = new System.Drawing.Point(97, 160);
|
this.time_data_label.Location = new System.Drawing.Point(101, 159);
|
||||||
this.time_data_label.Name = "time_data_label";
|
this.time_data_label.Name = "time_data_label";
|
||||||
this.time_data_label.Size = new System.Drawing.Size(266, 17);
|
this.time_data_label.Size = new System.Drawing.Size(437, 21);
|
||||||
this.time_data_label.TabIndex = 10;
|
this.time_data_label.TabIndex = 10;
|
||||||
this.time_data_label.Text = "No Data";
|
this.time_data_label.Text = "No Data";
|
||||||
this.time_data_label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
this.time_data_label.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
@@ -212,9 +212,9 @@
|
|||||||
this.label9.AutoSize = true;
|
this.label9.AutoSize = true;
|
||||||
this.label9.Location = new System.Drawing.Point(17, 144);
|
this.label9.Location = new System.Drawing.Point(17, 144);
|
||||||
this.label9.Name = "label9";
|
this.label9.Name = "label9";
|
||||||
this.label9.Size = new System.Drawing.Size(357, 16);
|
this.label9.Size = new System.Drawing.Size(539, 16);
|
||||||
this.label9.TabIndex = 9;
|
this.label9.TabIndex = 9;
|
||||||
this.label9.Text = "――――――――――――――――――――――――――――――――――――――――――――――――――";
|
this.label9.Text = "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――";
|
||||||
this.label9.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
|
this.label9.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
|
||||||
//
|
//
|
||||||
// time_label
|
// time_label
|
||||||
@@ -233,9 +233,9 @@
|
|||||||
this.label8.AutoSize = true;
|
this.label8.AutoSize = true;
|
||||||
this.label8.Location = new System.Drawing.Point(20, 103);
|
this.label8.Location = new System.Drawing.Point(20, 103);
|
||||||
this.label8.Name = "label8";
|
this.label8.Name = "label8";
|
||||||
this.label8.Size = new System.Drawing.Size(357, 16);
|
this.label8.Size = new System.Drawing.Size(539, 16);
|
||||||
this.label8.TabIndex = 7;
|
this.label8.TabIndex = 7;
|
||||||
this.label8.Text = "――――――――――――――――――――――――――――――――――――――――――――――――――";
|
this.label8.Text = "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――";
|
||||||
this.label8.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
|
this.label8.TextAlign = System.Drawing.ContentAlignment.BottomCenter;
|
||||||
//
|
//
|
||||||
// label7
|
// label7
|
||||||
@@ -243,36 +243,43 @@
|
|||||||
this.label7.AutoSize = true;
|
this.label7.AutoSize = true;
|
||||||
this.label7.Location = new System.Drawing.Point(19, 61);
|
this.label7.Location = new System.Drawing.Point(19, 61);
|
||||||
this.label7.Name = "label7";
|
this.label7.Name = "label7";
|
||||||
this.label7.Size = new System.Drawing.Size(357, 16);
|
this.label7.Size = new System.Drawing.Size(539, 16);
|
||||||
this.label7.TabIndex = 6;
|
this.label7.TabIndex = 6;
|
||||||
this.label7.Text = "――――――――――――――――――――――――――――――――――――――――――――――――――";
|
this.label7.Text = "――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――";
|
||||||
|
this.label7.Click += new System.EventHandler(this.label7_Click_1);
|
||||||
//
|
//
|
||||||
// album_data
|
// album_data
|
||||||
//
|
//
|
||||||
|
this.album_data.AutoEllipsis = true;
|
||||||
|
this.album_data.AutoSize = false;
|
||||||
this.album_data.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.album_data.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.album_data.Location = new System.Drawing.Point(99, 121);
|
this.album_data.Location = new System.Drawing.Point(100, 119);
|
||||||
this.album_data.Name = "album_data";
|
this.album_data.Name = "album_data";
|
||||||
this.album_data.Size = new System.Drawing.Size(266, 17);
|
this.album_data.Size = new System.Drawing.Size(443, 19);
|
||||||
this.album_data.TabIndex = 5;
|
this.album_data.TabIndex = 5;
|
||||||
this.album_data.Text = "No album";
|
this.album_data.Text = "No album";
|
||||||
this.album_data.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
this.album_data.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
//
|
//
|
||||||
// artist_data
|
// artist_data
|
||||||
//
|
//
|
||||||
|
this.artist_data.AutoEllipsis = true;
|
||||||
|
this.artist_data.AutoSize = false;
|
||||||
this.artist_data.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.artist_data.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.artist_data.Location = new System.Drawing.Point(99, 76);
|
this.artist_data.Location = new System.Drawing.Point(99, 76);
|
||||||
this.artist_data.Name = "artist_data";
|
this.artist_data.Name = "artist_data";
|
||||||
this.artist_data.Size = new System.Drawing.Size(266, 17);
|
this.artist_data.Size = new System.Drawing.Size(433, 23);
|
||||||
this.artist_data.TabIndex = 4;
|
this.artist_data.TabIndex = 4;
|
||||||
this.artist_data.Text = "No artist";
|
this.artist_data.Text = "No artist";
|
||||||
this.artist_data.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
this.artist_data.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
//
|
//
|
||||||
// title_data
|
// title_data
|
||||||
//
|
//
|
||||||
|
this.title_data.AutoEllipsis = true;
|
||||||
|
this.title_data.AutoSize = false;
|
||||||
this.title_data.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.title_data.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.title_data.Location = new System.Drawing.Point(99, 33);
|
this.title_data.Location = new System.Drawing.Point(97, 33);
|
||||||
this.title_data.Name = "title_data";
|
this.title_data.Name = "title_data";
|
||||||
this.title_data.Size = new System.Drawing.Size(266, 16);
|
this.title_data.Size = new System.Drawing.Size(443, 20);
|
||||||
this.title_data.TabIndex = 3;
|
this.title_data.TabIndex = 3;
|
||||||
this.title_data.Text = "No title";
|
this.title_data.Text = "No title";
|
||||||
this.title_data.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
this.title_data.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||||
@@ -309,7 +316,7 @@
|
|||||||
//
|
//
|
||||||
// button1
|
// button1
|
||||||
//
|
//
|
||||||
this.button1.Location = new System.Drawing.Point(62, 281);
|
this.button1.Location = new System.Drawing.Point(425, 254);
|
||||||
this.button1.Name = "button1";
|
this.button1.Name = "button1";
|
||||||
this.button1.Size = new System.Drawing.Size(99, 42);
|
this.button1.Size = new System.Drawing.Size(99, 42);
|
||||||
this.button1.TabIndex = 5;
|
this.button1.TabIndex = 5;
|
||||||
@@ -319,7 +326,7 @@
|
|||||||
//
|
//
|
||||||
// button2
|
// button2
|
||||||
//
|
//
|
||||||
this.button2.Location = new System.Drawing.Point(180, 281);
|
this.button2.Location = new System.Drawing.Point(577, 253);
|
||||||
this.button2.Name = "button2";
|
this.button2.Name = "button2";
|
||||||
this.button2.Size = new System.Drawing.Size(99, 42);
|
this.button2.Size = new System.Drawing.Size(99, 42);
|
||||||
this.button2.TabIndex = 6;
|
this.button2.TabIndex = 6;
|
||||||
@@ -330,7 +337,7 @@
|
|||||||
// uicolor
|
// uicolor
|
||||||
//
|
//
|
||||||
this.uicolor.Image = global::RadioDJViewer.Properties.Resources.MdiWeatherNight;
|
this.uicolor.Image = global::RadioDJViewer.Properties.Resources.MdiWeatherNight;
|
||||||
this.uicolor.Location = new System.Drawing.Point(572, 327);
|
this.uicolor.Location = new System.Drawing.Point(740, 262);
|
||||||
this.uicolor.Name = "uicolor";
|
this.uicolor.Name = "uicolor";
|
||||||
this.uicolor.Size = new System.Drawing.Size(28, 23);
|
this.uicolor.Size = new System.Drawing.Size(28, 23);
|
||||||
this.uicolor.TabIndex = 7;
|
this.uicolor.TabIndex = 7;
|
||||||
@@ -347,7 +354,7 @@
|
|||||||
// profile_drop_box
|
// profile_drop_box
|
||||||
//
|
//
|
||||||
this.profile_drop_box.FormattingEnabled = true;
|
this.profile_drop_box.FormattingEnabled = true;
|
||||||
this.profile_drop_box.Location = new System.Drawing.Point(62, 329);
|
this.profile_drop_box.Location = new System.Drawing.Point(62, 268);
|
||||||
this.profile_drop_box.Name = "profile_drop_box";
|
this.profile_drop_box.Name = "profile_drop_box";
|
||||||
this.profile_drop_box.Size = new System.Drawing.Size(217, 21);
|
this.profile_drop_box.Size = new System.Drawing.Size(217, 21);
|
||||||
this.profile_drop_box.TabIndex = 8;
|
this.profile_drop_box.TabIndex = 8;
|
||||||
@@ -355,7 +362,7 @@
|
|||||||
// profile_label
|
// profile_label
|
||||||
//
|
//
|
||||||
this.profile_label.AutoSize = true;
|
this.profile_label.AutoSize = true;
|
||||||
this.profile_label.Location = new System.Drawing.Point(12, 332);
|
this.profile_label.Location = new System.Drawing.Point(12, 272);
|
||||||
this.profile_label.Name = "profile_label";
|
this.profile_label.Name = "profile_label";
|
||||||
this.profile_label.Size = new System.Drawing.Size(44, 13);
|
this.profile_label.Size = new System.Drawing.Size(44, 13);
|
||||||
this.profile_label.TabIndex = 9;
|
this.profile_label.TabIndex = 9;
|
||||||
@@ -364,7 +371,7 @@
|
|||||||
//
|
//
|
||||||
// load_profile_button
|
// load_profile_button
|
||||||
//
|
//
|
||||||
this.load_profile_button.Location = new System.Drawing.Point(285, 327);
|
this.load_profile_button.Location = new System.Drawing.Point(292, 267);
|
||||||
this.load_profile_button.Name = "load_profile_button";
|
this.load_profile_button.Name = "load_profile_button";
|
||||||
this.load_profile_button.Size = new System.Drawing.Size(75, 23);
|
this.load_profile_button.Size = new System.Drawing.Size(75, 23);
|
||||||
this.load_profile_button.TabIndex = 10;
|
this.load_profile_button.TabIndex = 10;
|
||||||
@@ -375,7 +382,7 @@
|
|||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(612, 388);
|
this.ClientSize = new System.Drawing.Size(780, 335);
|
||||||
this.Controls.Add(this.load_profile_button);
|
this.Controls.Add(this.load_profile_button);
|
||||||
this.Controls.Add(this.profile_label);
|
this.Controls.Add(this.profile_label);
|
||||||
this.Controls.Add(this.profile_drop_box);
|
this.Controls.Add(this.profile_drop_box);
|
||||||
|
|||||||
+166
-371
@@ -34,6 +34,8 @@ namespace RadioDJViewer
|
|||||||
private string selectedFolderPath = string.Empty;
|
private string selectedFolderPath = string.Empty;
|
||||||
private string outputFolderPath = string.Empty;
|
private string outputFolderPath = string.Empty;
|
||||||
private bool isConnected = false;
|
private bool isConnected = false;
|
||||||
|
private bool _isDisconnecting = false;
|
||||||
|
private CancellationTokenSource _connectionCts = new CancellationTokenSource();
|
||||||
private string currentProfile = "Default";
|
private string currentProfile = "Default";
|
||||||
private string currentSongImagePath = string.Empty; // Path to the current song image
|
private string currentSongImagePath = string.Empty; // Path to the current song image
|
||||||
private string defaultImagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "default.jpg");
|
private string defaultImagePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "default.jpg");
|
||||||
@@ -48,23 +50,6 @@ namespace RadioDJViewer
|
|||||||
private System.Windows.Forms.Timer playbackTimer;
|
private System.Windows.Forms.Timer playbackTimer;
|
||||||
private string lastApiXml = null;
|
private string lastApiXml = null;
|
||||||
|
|
||||||
private System.Windows.Forms.Timer marqueeTimerTitle;
|
|
||||||
private System.Windows.Forms.Timer marqueeTimerArtist;
|
|
||||||
private System.Windows.Forms.Timer marqueeTimerAlbum;
|
|
||||||
private int marqueeOffsetTitle = 0;
|
|
||||||
private int marqueeOffsetArtist = 0;
|
|
||||||
private int marqueeOffsetAlbum = 0;
|
|
||||||
private string marqueeTextTitle = "";
|
|
||||||
private string marqueeTextArtist = "";
|
|
||||||
private string marqueeTextAlbum = "";
|
|
||||||
|
|
||||||
private System.Windows.Forms.Timer pauseTimerTitle;
|
|
||||||
private System.Windows.Forms.Timer pauseTimerArtist;
|
|
||||||
private System.Windows.Forms.Timer pauseTimerAlbum;
|
|
||||||
|
|
||||||
private int marqueeScrollSpeed = 100; // Default to Medium
|
|
||||||
private int marqueePauseTime = 6000; // Default to 6 seconds
|
|
||||||
private string marqueeSeparator = " | "; // Default separator
|
|
||||||
private bool loggingEnabled = false;
|
private bool loggingEnabled = false;
|
||||||
private string logFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "RadioDJViewer.log");
|
private string logFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "RadioDJViewer.log");
|
||||||
|
|
||||||
@@ -81,23 +66,24 @@ namespace RadioDJViewer
|
|||||||
playbackTimer = new System.Windows.Forms.Timer();
|
playbackTimer = new System.Windows.Forms.Timer();
|
||||||
playbackTimer.Interval = 250;
|
playbackTimer.Interval = 250;
|
||||||
playbackTimer.Tick += PlaybackTimer_Tick;
|
playbackTimer.Tick += PlaybackTimer_Tick;
|
||||||
// Marquee timers for each label
|
|
||||||
marqueeTimerTitle = new System.Windows.Forms.Timer();
|
|
||||||
marqueeTimerTitle.Interval = marqueeScrollSpeed;
|
|
||||||
marqueeTimerTitle.Tick += MarqueeTimerTitle_Tick;
|
|
||||||
marqueeTimerArtist = new System.Windows.Forms.Timer();
|
|
||||||
marqueeTimerArtist.Interval = marqueeScrollSpeed;
|
|
||||||
marqueeTimerArtist.Tick += MarqueeTimerArtist_Tick;
|
|
||||||
marqueeTimerAlbum = new System.Windows.Forms.Timer();
|
|
||||||
marqueeTimerAlbum.Interval = marqueeScrollSpeed;
|
|
||||||
marqueeTimerAlbum.Tick += MarqueeTimerAlbum_Tick;
|
|
||||||
// Wire up dark mode button
|
// Wire up dark mode button
|
||||||
this.uicolor.Click += Uicolor_Click;
|
this.uicolor.Click += Uicolor_Click;
|
||||||
this.load_profile_button.Click += load_profile_button_Click;
|
this.load_profile_button.Click += load_profile_button_Click;
|
||||||
PopulateProfileDropBox();
|
PopulateProfileDropBox();
|
||||||
UpdateTheme();
|
UpdateTheme();
|
||||||
// Auto-load profiles if profiles.json exists
|
}
|
||||||
AutoLoadProfiles();
|
|
||||||
|
public void SetSongMetadataLabels(string title, string artist, string album)
|
||||||
|
{
|
||||||
|
if (InvokeRequired)
|
||||||
|
{
|
||||||
|
BeginInvoke((Action)(() => SetSongMetadataLabels(title, artist, album)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
title_data.Text = title;
|
||||||
|
artist_data.Text = artist;
|
||||||
|
album_data.Text = album;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void EnsureDefaultImageExists()
|
private void EnsureDefaultImageExists()
|
||||||
@@ -113,32 +99,6 @@ namespace RadioDJViewer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetMarqueeScrollSpeed(string speed)
|
|
||||||
{
|
|
||||||
switch (speed)
|
|
||||||
{
|
|
||||||
case "Very Slow": marqueeScrollSpeed = 300; break;
|
|
||||||
case "Slow": marqueeScrollSpeed = 200; break;
|
|
||||||
case "Medium": marqueeScrollSpeed = 100; break;
|
|
||||||
case "Fast": marqueeScrollSpeed = 60; break;
|
|
||||||
case "Very Fast": marqueeScrollSpeed = 30; break;
|
|
||||||
default: marqueeScrollSpeed = 100; break;
|
|
||||||
}
|
|
||||||
marqueeTimerTitle.Interval = marqueeScrollSpeed;
|
|
||||||
marqueeTimerArtist.Interval = marqueeScrollSpeed;
|
|
||||||
marqueeTimerAlbum.Interval = marqueeScrollSpeed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetMarqueePauseTime(int seconds)
|
|
||||||
{
|
|
||||||
marqueePauseTime = seconds * 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetMarqueeSeparator(string separator)
|
|
||||||
{
|
|
||||||
marqueeSeparator = separator;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LogMessage(string message)
|
private void LogMessage(string message)
|
||||||
{
|
{
|
||||||
if (!loggingEnabled) return;
|
if (!loggingEnabled) return;
|
||||||
@@ -149,117 +109,6 @@ namespace RadioDJViewer
|
|||||||
catch { }
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GetVisibleChars(Label label)
|
|
||||||
{
|
|
||||||
// Use the label's actual width and font to estimate visible characters
|
|
||||||
using (Graphics g = label.CreateGraphics())
|
|
||||||
{
|
|
||||||
SizeF size = g.MeasureString("W", label.Font);
|
|
||||||
int chars = (int)(label.Width / size.Width);
|
|
||||||
return Math.Max(chars, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool ShouldScroll(Label label, string text)
|
|
||||||
{
|
|
||||||
return !string.IsNullOrWhiteSpace(text) && text.Length > GetVisibleChars(label);
|
|
||||||
}
|
|
||||||
|
|
||||||
private string GetMarqueeWindow(string source, int startIndex, int length)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(source) || length <= 0)
|
|
||||||
return string.Empty;
|
|
||||||
|
|
||||||
var builder = new StringBuilder(length);
|
|
||||||
for (int i = 0; i < length; i++)
|
|
||||||
{
|
|
||||||
builder.Append(source[(startIndex + i) % source.Length]);
|
|
||||||
}
|
|
||||||
return builder.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetLabelTextFull(Label label, string text)
|
|
||||||
{
|
|
||||||
label.Text = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void StartMarqueeTimers()
|
|
||||||
{
|
|
||||||
marqueeOffsetTitle = 0;
|
|
||||||
marqueeOffsetArtist = 0;
|
|
||||||
marqueeOffsetAlbum = 0;
|
|
||||||
|
|
||||||
if (pauseTimerTitle != null) pauseTimerTitle.Stop();
|
|
||||||
if (pauseTimerArtist != null) pauseTimerArtist.Stop();
|
|
||||||
if (pauseTimerAlbum != null) pauseTimerAlbum.Stop();
|
|
||||||
|
|
||||||
if (ShouldScroll(title_data, marqueeTextTitle)) marqueeTimerTitle.Start(); else marqueeTimerTitle.Stop();
|
|
||||||
if (ShouldScroll(artist_data, marqueeTextArtist)) marqueeTimerArtist.Start(); else marqueeTimerArtist.Stop();
|
|
||||||
if (ShouldScroll(album_data, marqueeTextAlbum)) marqueeTimerAlbum.Start(); else marqueeTimerAlbum.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateMarqueeLabel(Label label, System.Windows.Forms.Timer marqueeTimer, ref System.Windows.Forms.Timer pauseTimer, string text, string labelName, Func<int> getOffset, Action<int> setOffset, Action resetOffset)
|
|
||||||
{
|
|
||||||
string displayText = string.IsNullOrWhiteSpace(text) ? string.Empty : text;
|
|
||||||
int visibleChars = GetVisibleChars(label);
|
|
||||||
string separator = string.IsNullOrEmpty(marqueeSeparator) ? string.Empty : marqueeSeparator;
|
|
||||||
int offset = getOffset();
|
|
||||||
|
|
||||||
if (!ShouldScroll(label, displayText))
|
|
||||||
{
|
|
||||||
marqueeTimer.Stop();
|
|
||||||
if (pauseTimer != null) pauseTimer.Stop();
|
|
||||||
resetOffset();
|
|
||||||
SetLabelTextFull(label, displayText);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
string scrollText = displayText + separator;
|
|
||||||
if (offset >= scrollText.Length)
|
|
||||||
offset = 0;
|
|
||||||
|
|
||||||
label.Text = GetMarqueeWindow(scrollText, offset, visibleChars);
|
|
||||||
LogMessage($"{labelName}: separator='{separator}', scrollText='{scrollText}', offset={offset}");
|
|
||||||
|
|
||||||
if (offset >= displayText.Length)
|
|
||||||
{
|
|
||||||
marqueeTimer.Stop();
|
|
||||||
var pause = pauseTimer;
|
|
||||||
if (pause == null)
|
|
||||||
{
|
|
||||||
pause = new System.Windows.Forms.Timer();
|
|
||||||
pause.Tick += (s, args) =>
|
|
||||||
{
|
|
||||||
pause.Stop();
|
|
||||||
resetOffset();
|
|
||||||
marqueeTimer.Start();
|
|
||||||
};
|
|
||||||
pauseTimer = pause;
|
|
||||||
}
|
|
||||||
|
|
||||||
pause.Interval = marqueePauseTime;
|
|
||||||
pause.Start();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
setOffset(offset + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MarqueeTimerTitle_Tick(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
UpdateMarqueeLabel(title_data, marqueeTimerTitle, ref pauseTimerTitle, marqueeTextTitle, "MarqueeTitle", () => marqueeOffsetTitle, value => marqueeOffsetTitle = value, () => marqueeOffsetTitle = 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MarqueeTimerArtist_Tick(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
UpdateMarqueeLabel(artist_data, marqueeTimerArtist, ref pauseTimerArtist, marqueeTextArtist, "MarqueeArtist", () => marqueeOffsetArtist, value => marqueeOffsetArtist = value, () => marqueeOffsetArtist = 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void MarqueeTimerAlbum_Tick(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
UpdateMarqueeLabel(album_data, marqueeTimerAlbum, ref pauseTimerAlbum, marqueeTextAlbum, "MarqueeAlbum", () => marqueeOffsetAlbum, value => marqueeOffsetAlbum = value, () => marqueeOffsetAlbum = 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ApiTimer_Tick(object sender, EventArgs e)
|
private void ApiTimer_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (isConnected)
|
if (isConnected)
|
||||||
@@ -270,7 +119,7 @@ namespace RadioDJViewer
|
|||||||
|
|
||||||
private async Task PollRestApi()
|
private async Task PollRestApi()
|
||||||
{
|
{
|
||||||
if (loadedProfile == null) return;
|
if (loadedProfile == null || _isDisconnecting || _connectionCts.IsCancellationRequested) return;
|
||||||
string url = loadedProfile.UrlFormat;
|
string url = loadedProfile.UrlFormat;
|
||||||
if (!string.IsNullOrWhiteSpace(url))
|
if (!string.IsNullOrWhiteSpace(url))
|
||||||
{
|
{
|
||||||
@@ -284,34 +133,24 @@ namespace RadioDJViewer
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var client = new System.Net.Http.HttpClient();
|
using (var client = new System.Net.Http.HttpClient())
|
||||||
var response = await client.GetAsync(url);
|
|
||||||
if (response.IsSuccessStatusCode)
|
|
||||||
{
|
{
|
||||||
var xml = await response.Content.ReadAsStringAsync();
|
var response = await client.GetAsync(url);
|
||||||
lastApiXml = xml;
|
if (_isDisconnecting || _connectionCts.IsCancellationRequested || !isConnected)
|
||||||
ParseAndDisplaySongInfo(xml);
|
return;
|
||||||
}
|
|
||||||
}
|
|
||||||
catch { }
|
|
||||||
}
|
|
||||||
|
|
||||||
private void AutoLoadProfiles()
|
if (response.IsSuccessStatusCode)
|
||||||
{
|
|
||||||
string profilesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "profiles.json");
|
|
||||||
if (File.Exists(profilesPath))
|
|
||||||
{
|
|
||||||
var profileNames = ProfileStorage.GetProfileNames();
|
|
||||||
if (profileNames.Count > 0)
|
|
||||||
{
|
|
||||||
// Optionally, load the first profile by default
|
|
||||||
var profile = ProfileStorage.LoadProfile(profileNames[0]);
|
|
||||||
if (profile != null)
|
|
||||||
{
|
{
|
||||||
LoadProfile(profile);
|
var xml = await response.Content.ReadAsStringAsync();
|
||||||
|
if (_isDisconnecting || _connectionCts.IsCancellationRequested || !isConnected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
lastApiXml = xml;
|
||||||
|
ParseAndDisplaySongInfo(xml);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
catch { }
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void button1_Click(object sender, EventArgs e)
|
private async void button1_Click(object sender, EventArgs e)
|
||||||
@@ -330,7 +169,9 @@ namespace RadioDJViewer
|
|||||||
private void button2_Click(object sender, EventArgs e)
|
private void button2_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
// Disconnect
|
// Disconnect
|
||||||
|
_isDisconnecting = true;
|
||||||
isConnected = false;
|
isConnected = false;
|
||||||
|
try { _connectionCts.Cancel(); } catch { }
|
||||||
apiTimer.Stop();
|
apiTimer.Stop();
|
||||||
playbackTimer.Stop();
|
playbackTimer.Stop();
|
||||||
_playbackElapsedSeconds = 0;
|
_playbackElapsedSeconds = 0;
|
||||||
@@ -352,6 +193,8 @@ namespace RadioDJViewer
|
|||||||
catch { }
|
catch { }
|
||||||
ClearStatusMessage();
|
ClearStatusMessage();
|
||||||
UpdateStatusBar();
|
UpdateStatusBar();
|
||||||
|
_isDisconnecting = false;
|
||||||
|
_connectionCts = new CancellationTokenSource();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ConnectToRestApi()
|
private async Task ConnectToRestApi()
|
||||||
@@ -380,27 +223,37 @@ namespace RadioDJViewer
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var client = new System.Net.Http.HttpClient();
|
_isDisconnecting = false;
|
||||||
var response = await client.GetAsync(url);
|
_connectionCts = new CancellationTokenSource();
|
||||||
if (response.IsSuccessStatusCode)
|
using (var client = new System.Net.Http.HttpClient())
|
||||||
{
|
{
|
||||||
var xml = await response.Content.ReadAsStringAsync();
|
var response = await client.GetAsync(url);
|
||||||
ParseAndDisplaySongInfo(xml);
|
if (_isDisconnecting || _connectionCts.IsCancellationRequested)
|
||||||
try
|
return;
|
||||||
|
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
_currentTrackKey = $"{marqueeTextArtist}|{marqueeTextTitle}";
|
var xml = await response.Content.ReadAsStringAsync();
|
||||||
|
if (_isDisconnecting || _connectionCts.IsCancellationRequested)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ParseAndDisplaySongInfo(xml);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_currentTrackKey = $"{_previousToastArtist}|{_previousToastTitle}";
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
isConnected = true;
|
||||||
|
// Clear the 'Connecting...' persistent message and show connected
|
||||||
|
ClearStatusMessage();
|
||||||
|
UpdateStatusBar();
|
||||||
|
// Start web server immediately after API connection if profile requests it
|
||||||
|
StartWidgetServerIfEnabled();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isConnected = false;
|
||||||
}
|
}
|
||||||
catch { }
|
|
||||||
isConnected = true;
|
|
||||||
// Clear the 'Connecting...' persistent message and show connected
|
|
||||||
ClearStatusMessage();
|
|
||||||
UpdateStatusBar();
|
|
||||||
// Start web server immediately after API connection if profile requests it
|
|
||||||
StartWidgetServerIfEnabled();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isConnected = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -411,7 +264,6 @@ namespace RadioDJViewer
|
|||||||
UpdateStatusBar();
|
UpdateStatusBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call this method after parsing song info, assuming image path is available from profile or API
|
|
||||||
private void UpdateCurrentSongImage(string imageName)
|
private void UpdateCurrentSongImage(string imageName)
|
||||||
{
|
{
|
||||||
string imagePath = string.Empty;
|
string imagePath = string.Empty;
|
||||||
@@ -490,13 +342,6 @@ namespace RadioDJViewer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StopMarqueeTimers()
|
|
||||||
{
|
|
||||||
marqueeTimerTitle.Stop();
|
|
||||||
marqueeTimerArtist.Stop();
|
|
||||||
marqueeTimerAlbum.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PlaybackTimer_Tick(object sender, EventArgs e)
|
private void PlaybackTimer_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
UpdatePlaybackDisplay();
|
UpdatePlaybackDisplay();
|
||||||
@@ -577,6 +422,9 @@ namespace RadioDJViewer
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
if (_isDisconnecting || _connectionCts.IsCancellationRequested || IsDisposed)
|
||||||
|
return;
|
||||||
|
|
||||||
var doc = new XmlDocument();
|
var doc = new XmlDocument();
|
||||||
doc.LoadXml(xml);
|
doc.LoadXml(xml);
|
||||||
// Parse title, artist, album from XML (case-insensitive)
|
// Parse title, artist, album from XML (case-insensitive)
|
||||||
@@ -588,44 +436,29 @@ namespace RadioDJViewer
|
|||||||
string elapsed = doc.SelectSingleNode("//*[translate(local-name(), 'ELAPSED', 'elapsed')='elapsed']")?.InnerText;
|
string elapsed = doc.SelectSingleNode("//*[translate(local-name(), 'ELAPSED', 'elapsed')='elapsed']")?.InnerText;
|
||||||
string duration = doc.SelectSingleNode("//*[translate(local-name(), 'DURATION', 'duration')='duration']")?.InnerText;
|
string duration = doc.SelectSingleNode("//*[translate(local-name(), 'DURATION', 'duration')='duration']")?.InnerText;
|
||||||
|
|
||||||
marqueeTextTitle = !string.IsNullOrWhiteSpace(title) ? title : "No title";
|
string titleText = !string.IsNullOrWhiteSpace(title) ? title : "No title";
|
||||||
marqueeTextArtist = !string.IsNullOrWhiteSpace(artist) ? artist : "No artist";
|
string artistText = !string.IsNullOrWhiteSpace(artist) ? artist : "No artist";
|
||||||
marqueeTextAlbum = !string.IsNullOrWhiteSpace(album) ? album : "No album";
|
string albumText = !string.IsNullOrWhiteSpace(album) ? album : "No album";
|
||||||
|
bool trackChanged = !string.Equals(titleText, _previousToastTitle, StringComparison.OrdinalIgnoreCase)
|
||||||
|
|| !string.Equals(artistText, _previousToastArtist, StringComparison.OrdinalIgnoreCase);
|
||||||
|
|
||||||
// Explicitly set label text on UI thread
|
SetSongMetadataLabels(titleText, artistText, albumText);
|
||||||
if (this.InvokeRequired)
|
|
||||||
{
|
|
||||||
this.BeginInvoke(new Action(() =>
|
|
||||||
{
|
|
||||||
title_data.Text = marqueeTextTitle;
|
|
||||||
artist_data.Text = marqueeTextArtist;
|
|
||||||
album_data.Text = marqueeTextAlbum;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
title_data.Text = marqueeTextTitle;
|
|
||||||
artist_data.Text = marqueeTextArtist;
|
|
||||||
album_data.Text = marqueeTextAlbum;
|
|
||||||
}
|
|
||||||
|
|
||||||
StartMarqueeTimers();
|
UpdatePlaybackState($"{artistText}|{titleText}", elapsed, duration);
|
||||||
|
|
||||||
UpdatePlaybackState($"{marqueeTextArtist}|{marqueeTextTitle}", elapsed, duration);
|
|
||||||
|
|
||||||
// Write to output files
|
// Write to output files
|
||||||
if (!string.IsNullOrEmpty(outputFolderPath))
|
if (!string.IsNullOrEmpty(outputFolderPath))
|
||||||
{
|
{
|
||||||
File.WriteAllText(Path.Combine(outputFolderPath, "title.txt"), marqueeTextTitle);
|
File.WriteAllText(Path.Combine(outputFolderPath, "title.txt"), titleText);
|
||||||
File.WriteAllText(Path.Combine(outputFolderPath, "artist.txt"), marqueeTextArtist);
|
File.WriteAllText(Path.Combine(outputFolderPath, "artist.txt"), artistText);
|
||||||
File.WriteAllText(Path.Combine(outputFolderPath, "album.txt"), marqueeTextAlbum);
|
File.WriteAllText(Path.Combine(outputFolderPath, "album.txt"), albumText);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update in-memory cache for widget server
|
// Update in-memory cache for widget server
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
WidgetServer.CachedArtist = marqueeTextArtist ?? string.Empty;
|
WidgetServer.CachedArtist = artistText ?? string.Empty;
|
||||||
WidgetServer.CachedTitle = marqueeTextTitle ?? string.Empty;
|
WidgetServer.CachedTitle = titleText ?? string.Empty;
|
||||||
|
|
||||||
byte[] imgBytes = null;
|
byte[] imgBytes = null;
|
||||||
// Prefer album art from main images folder
|
// Prefer album art from main images folder
|
||||||
@@ -675,32 +508,24 @@ namespace RadioDJViewer
|
|||||||
UpdateCurrentSongImage(null);
|
UpdateCurrentSongImage(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
HandleToastForTrackChange(title, artist);
|
if (trackChanged)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
System.Diagnostics.Debug.WriteLine($"[Toast] Track change detected. newTitle='{titleText}', newArtist='{artistText}'");
|
||||||
|
#endif
|
||||||
|
HandleToastForTrackChange(titleText, artistText);
|
||||||
|
_previousToastTitle = titleText;
|
||||||
|
_previousToastArtist = artistText;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
marqueeTextTitle = "No title";
|
if (_isDisconnecting || _connectionCts.IsCancellationRequested || IsDisposed)
|
||||||
marqueeTextArtist = "No artist";
|
return;
|
||||||
marqueeTextAlbum = "No album";
|
|
||||||
|
|
||||||
// Explicitly set label text on UI thread in error case
|
SetSongMetadataLabels("No title", "No artist", "No album");
|
||||||
if (this.InvokeRequired)
|
_previousToastTitle = "No title";
|
||||||
{
|
_previousToastArtist = "No artist";
|
||||||
this.BeginInvoke(new Action(() =>
|
|
||||||
{
|
|
||||||
title_data.Text = marqueeTextTitle;
|
|
||||||
artist_data.Text = marqueeTextArtist;
|
|
||||||
album_data.Text = marqueeTextAlbum;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
title_data.Text = marqueeTextTitle;
|
|
||||||
artist_data.Text = marqueeTextArtist;
|
|
||||||
album_data.Text = marqueeTextAlbum;
|
|
||||||
}
|
|
||||||
|
|
||||||
StartMarqueeTimers();
|
|
||||||
playbackTimer.Stop();
|
playbackTimer.Stop();
|
||||||
_playbackElapsedSeconds = 0;
|
_playbackElapsedSeconds = 0;
|
||||||
_playbackDurationSeconds = 0;
|
_playbackDurationSeconds = 0;
|
||||||
@@ -796,7 +621,7 @@ namespace RadioDJViewer
|
|||||||
if (widgetServer == null)
|
if (widgetServer == null)
|
||||||
{
|
{
|
||||||
int port = loadedProfile.WebServerPort > 0 ? loadedProfile.WebServerPort : 8080;
|
int port = loadedProfile.WebServerPort > 0 ? loadedProfile.WebServerPort : 8080;
|
||||||
widgetServer = new WidgetServer(port, () => marqueeTextArtist, () => marqueeTextTitle, () => this.currentSongImagePath ?? this.defaultImagePath);
|
widgetServer = new WidgetServer(port, () => _previousToastArtist, () => _previousToastTitle, () => this.currentSongImagePath ?? this.defaultImagePath);
|
||||||
}
|
}
|
||||||
widgetServer.Start();
|
widgetServer.Start();
|
||||||
widgetRunning = true;
|
widgetRunning = true;
|
||||||
@@ -844,19 +669,41 @@ namespace RadioDJViewer
|
|||||||
loadedProfile = profile;
|
loadedProfile = profile;
|
||||||
int pollingRate = profile.PollingRateSeconds > 0 ? profile.PollingRateSeconds : 3;
|
int pollingRate = profile.PollingRateSeconds > 0 ? profile.PollingRateSeconds : 3;
|
||||||
apiTimer.Interval = pollingRate * 1000;
|
apiTimer.Interval = pollingRate * 1000;
|
||||||
SetMarqueeScrollSpeed(profile.MarqueeScrollSpeed ?? "Medium");
|
|
||||||
SetMarqueePauseTime(profile.MarqueePauseTime > 0 ? profile.MarqueePauseTime : 6);
|
|
||||||
SetMarqueeSeparator(profile.MarqueeSeparator ?? " | ");
|
|
||||||
if (pauseTimerTitle != null) pauseTimerTitle.Interval = marqueePauseTime;
|
|
||||||
if (pauseTimerArtist != null) pauseTimerArtist.Interval = marqueePauseTime;
|
|
||||||
if (pauseTimerAlbum != null) pauseTimerAlbum.Interval = marqueePauseTime;
|
|
||||||
marqueeTimerTitle.Interval = marqueeScrollSpeed;
|
|
||||||
marqueeTimerArtist.Interval = marqueeScrollSpeed;
|
|
||||||
marqueeTimerAlbum.Interval = marqueeScrollSpeed;
|
|
||||||
WidgetServer.CachedClockVisibility = profile.ClockVisibilityEnabled;
|
WidgetServer.CachedClockVisibility = profile.ClockVisibilityEnabled;
|
||||||
UpdateStatusBar();
|
UpdateStatusBar();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void PopulateProfileDropBox()
|
||||||
|
{
|
||||||
|
profile_drop_box.Items.Clear();
|
||||||
|
var profileNames = ProfileStorage.GetProfileNames();
|
||||||
|
profile_drop_box.Items.AddRange(profileNames.ToArray());
|
||||||
|
string currentProfile = GetCurrentProfileName();
|
||||||
|
if (!string.IsNullOrEmpty(currentProfile) && profileNames.Contains(currentProfile))
|
||||||
|
profile_drop_box.SelectedItem = currentProfile;
|
||||||
|
else if (profile_drop_box.Items.Count > 0)
|
||||||
|
profile_drop_box.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void load_profile_button_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (profile_drop_box.SelectedItem != null)
|
||||||
|
{
|
||||||
|
var profile = ProfileStorage.LoadProfile(profile_drop_box.SelectedItem.ToString());
|
||||||
|
if (profile != null)
|
||||||
|
{
|
||||||
|
LoadProfile(profile);
|
||||||
|
UpdateStatusBar();
|
||||||
|
MessageBox.Show($"Profile '{profile.Name}' loaded.", "Profile Loaded", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetCurrentProfileName()
|
||||||
|
{
|
||||||
|
return currentProfile;
|
||||||
|
}
|
||||||
|
|
||||||
private void Uicolor_Click(object sender, EventArgs e)
|
private void Uicolor_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
isDarkMode = !isDarkMode;
|
isDarkMode = !isDarkMode;
|
||||||
@@ -913,80 +760,21 @@ namespace RadioDJViewer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void label7_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private void label9_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public string GetCurrentProfileName()
|
|
||||||
{
|
|
||||||
return currentProfile;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PopulateProfileDropBox()
|
|
||||||
{
|
|
||||||
profile_drop_box.Items.Clear();
|
|
||||||
var profileNames = ProfileStorage.GetProfileNames();
|
|
||||||
profile_drop_box.Items.AddRange(profileNames.ToArray());
|
|
||||||
string currentProfile = GetCurrentProfileName();
|
|
||||||
if (!string.IsNullOrEmpty(currentProfile) && profileNames.Contains(currentProfile))
|
|
||||||
profile_drop_box.SelectedItem = currentProfile;
|
|
||||||
else if (profile_drop_box.Items.Count > 0)
|
|
||||||
profile_drop_box.SelectedIndex = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void load_profile_button_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (profile_drop_box.SelectedItem != null)
|
|
||||||
{
|
|
||||||
var profile = ProfileStorage.LoadProfile(profile_drop_box.SelectedItem.ToString());
|
|
||||||
if (profile != null)
|
|
||||||
{
|
|
||||||
LoadProfile(profile);
|
|
||||||
UpdateStatusBar();
|
|
||||||
MessageBox.Show($"Profile '{profile.Name}' loaded.", "Profile Loaded", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string FormatTimeDisplay(string elapsedSeconds, string durationSeconds)
|
|
||||||
{
|
|
||||||
double elapsed;
|
|
||||||
double duration;
|
|
||||||
if (!TryParseSeconds(elapsedSeconds, out elapsed) || !TryParseSeconds(durationSeconds, out duration))
|
|
||||||
{
|
|
||||||
return "No Data";
|
|
||||||
}
|
|
||||||
|
|
||||||
return FormatTimeDisplay(elapsed, duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
private string FormatTimeDisplay(double elapsed, double duration)
|
private string FormatTimeDisplay(double elapsed, double duration)
|
||||||
{
|
{
|
||||||
// If duration is zero or negative, show "No Data"
|
|
||||||
if (duration <= 0)
|
if (duration <= 0)
|
||||||
{
|
{
|
||||||
return "No Data";
|
return "No Data";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clamp elapsed to [0, duration]
|
|
||||||
if (elapsed < 0)
|
if (elapsed < 0)
|
||||||
elapsed = 0;
|
elapsed = 0;
|
||||||
if (elapsed > duration)
|
if (elapsed > duration)
|
||||||
elapsed = duration;
|
elapsed = duration;
|
||||||
|
|
||||||
// Convert to integers (seconds only)
|
|
||||||
int elapsedInt = (int)elapsed;
|
int elapsedInt = (int)elapsed;
|
||||||
int durationInt = (int)duration;
|
int durationInt = (int)duration;
|
||||||
|
return $"{FormatSeconds(elapsedInt)} / {FormatSeconds(durationInt)}";
|
||||||
// Convert seconds to MM:SS format
|
|
||||||
string elapsedFormatted = FormatSeconds(elapsedInt);
|
|
||||||
string durationFormatted = FormatSeconds(durationInt);
|
|
||||||
|
|
||||||
return $"{elapsedFormatted} / {durationFormatted}";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private string FormatSeconds(int seconds)
|
private string FormatSeconds(int seconds)
|
||||||
@@ -1001,43 +789,6 @@ namespace RadioDJViewer
|
|||||||
return loadedProfile != null && loadedProfile.ToastNotificationsEnabled;
|
return loadedProfile != null && loadedProfile.ToastNotificationsEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleToastForTrackChange(string title, string artist)
|
|
||||||
{
|
|
||||||
string normalizedTitle = NormalizeTrackMetadata(title);
|
|
||||||
string normalizedArtist = NormalizeTrackMetadata(artist);
|
|
||||||
|
|
||||||
if (string.Equals(normalizedTitle, _previousToastTitle, StringComparison.OrdinalIgnoreCase) &&
|
|
||||||
string.Equals(normalizedArtist, _previousToastArtist, StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
_previousToastTitle = normalizedTitle;
|
|
||||||
_previousToastArtist = normalizedArtist;
|
|
||||||
|
|
||||||
if (!IsToastEnabledForActiveProfile())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!HasValidTrackMetadata(normalizedTitle, normalizedArtist))
|
|
||||||
return;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string outputImagePath = GetProfileOutputImagePath();
|
|
||||||
#if DEBUG
|
|
||||||
System.Diagnostics.Debug.WriteLine($"[Toast] Track change accepted. title='{normalizedTitle}', artist='{normalizedArtist}', imagePath='{outputImagePath}'");
|
|
||||||
#endif
|
|
||||||
ShowTrackChangeToast(normalizedTitle, normalizedArtist, outputImagePath);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
#if DEBUG
|
|
||||||
System.Diagnostics.Debug.WriteLine($"[Toast] Trigger error: {ex}");
|
|
||||||
MessageBox.Show($"Toast trigger failed: {ex.Message}", "Toast Debug", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static string NormalizeTrackMetadata(string value)
|
private static string NormalizeTrackMetadata(string value)
|
||||||
{
|
{
|
||||||
return string.IsNullOrWhiteSpace(value) ? string.Empty : value.Trim();
|
return string.IsNullOrWhiteSpace(value) ? string.Empty : value.Trim();
|
||||||
@@ -1080,12 +831,56 @@ namespace RadioDJViewer
|
|||||||
|
|
||||||
private void ShowTrackChangeToast(string title, string artist, string outputImagePath)
|
private void ShowTrackChangeToast(string title, string artist, string outputImagePath)
|
||||||
{
|
{
|
||||||
|
if (IsDisposed || _isDisconnecting || !isConnected)
|
||||||
|
return;
|
||||||
|
|
||||||
string safeTitle = string.IsNullOrWhiteSpace(title) ? "No title" : title;
|
string safeTitle = string.IsNullOrWhiteSpace(title) ? "No title" : title;
|
||||||
string safeArtist = string.IsNullOrWhiteSpace(artist) ? "No artist" : artist;
|
string safeArtist = string.IsNullOrWhiteSpace(artist) ? "No artist" : artist;
|
||||||
DateTime now = DateTime.Now;
|
DateTime now = DateTime.Now;
|
||||||
string attribution = $"Date: {now:MM/dd/yyyy} | Time: {now:hh:mm tt}";
|
string attribution = $"Date: {now:MM/dd/yyyy} | Time: {now:hh:mm tt}";
|
||||||
ToastNotificationService.ShowTrackChangeToast(safeTitle, safeArtist, attribution, outputImagePath);
|
ToastNotificationService.ShowTrackChangeToast(safeTitle, safeArtist, attribution, outputImagePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void HandleToastForTrackChange(string title, string artist)
|
||||||
|
{
|
||||||
|
if (IsDisposed || _isDisconnecting || !isConnected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string normalizedTitle = NormalizeTrackMetadata(title);
|
||||||
|
string normalizedArtist = NormalizeTrackMetadata(artist);
|
||||||
|
|
||||||
|
if (!IsToastEnabledForActiveProfile())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!HasValidTrackMetadata(normalizedTitle, normalizedArtist))
|
||||||
|
return;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string outputImagePath = GetProfileOutputImagePath();
|
||||||
|
System.Diagnostics.Debug.WriteLine($"[Toast] Firing toast. title='{normalizedTitle}', artist='{normalizedArtist}', imagePath='{outputImagePath}'");
|
||||||
|
ShowTrackChangeToast(normalizedTitle, normalizedArtist, outputImagePath);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
System.Diagnostics.Debug.WriteLine($"[Toast] Trigger error: {ex}");
|
||||||
|
MessageBox.Show($"Toast trigger failed: {ex.Message}", "Toast Debug", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void label9_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void label7_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
private void label7_Click_1(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static class ToastNotificationService
|
internal static class ToastNotificationService
|
||||||
|
|||||||
@@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
|
|||||||
// Build Number
|
// Build Number
|
||||||
// Revision
|
// Revision
|
||||||
//
|
//
|
||||||
[assembly: AssemblyVersion("1.14.2")]
|
[assembly: AssemblyVersion("1.14.3")]
|
||||||
[assembly: AssemblyFileVersion("1.14.2")]
|
[assembly: AssemblyFileVersion("1.14.3")]
|
||||||
|
|||||||
+22
-107
@@ -54,7 +54,7 @@
|
|||||||
this.button6 = new System.Windows.Forms.Button();
|
this.button6 = new System.Windows.Forms.Button();
|
||||||
this.label6 = new System.Windows.Forms.Label();
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
this.label7 = new System.Windows.Forms.Label();
|
this.label7 = new System.Windows.Forms.Label();
|
||||||
this.textBox7 = new System.Windows.Forms.TextBox();
|
this.polling_rate_textbox = new System.Windows.Forms.TextBox();
|
||||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
||||||
this.toast_box_group_box = new System.Windows.Forms.GroupBox();
|
this.toast_box_group_box = new System.Windows.Forms.GroupBox();
|
||||||
this.toast_check_box_enable = new System.Windows.Forms.CheckBox();
|
this.toast_check_box_enable = new System.Windows.Forms.CheckBox();
|
||||||
@@ -66,13 +66,6 @@
|
|||||||
this.web_server_port_label = new System.Windows.Forms.Label();
|
this.web_server_port_label = new System.Windows.Forms.Label();
|
||||||
this.web_server_label = new System.Windows.Forms.Label();
|
this.web_server_label = new System.Windows.Forms.Label();
|
||||||
this.web_server_checkbox = new System.Windows.Forms.CheckBox();
|
this.web_server_checkbox = new System.Windows.Forms.CheckBox();
|
||||||
this.label13 = new System.Windows.Forms.Label();
|
|
||||||
this.comboBoxScrollSpeed = new System.Windows.Forms.ComboBox();
|
|
||||||
this.textBoxPauseTime = new System.Windows.Forms.TextBox();
|
|
||||||
this.separatingcharacterformatbox = new System.Windows.Forms.TextBox();
|
|
||||||
this.textBox9 = new System.Windows.Forms.TextBox();
|
|
||||||
this.label9 = new System.Windows.Forms.Label();
|
|
||||||
this.label8 = new System.Windows.Forms.Label();
|
|
||||||
this.label12 = new System.Windows.Forms.Label();
|
this.label12 = new System.Windows.Forms.Label();
|
||||||
this.groupBox1.SuspendLayout();
|
this.groupBox1.SuspendLayout();
|
||||||
this.groupBox3.SuspendLayout();
|
this.groupBox3.SuspendLayout();
|
||||||
@@ -110,7 +103,7 @@
|
|||||||
//
|
//
|
||||||
// ok_button_master
|
// ok_button_master
|
||||||
//
|
//
|
||||||
this.ok_button_master.Location = new System.Drawing.Point(54, 729);
|
this.ok_button_master.Location = new System.Drawing.Point(54, 684);
|
||||||
this.ok_button_master.Name = "ok_button_master";
|
this.ok_button_master.Name = "ok_button_master";
|
||||||
this.ok_button_master.Size = new System.Drawing.Size(157, 23);
|
this.ok_button_master.Size = new System.Drawing.Size(157, 23);
|
||||||
this.ok_button_master.TabIndex = 1;
|
this.ok_button_master.TabIndex = 1;
|
||||||
@@ -119,7 +112,7 @@
|
|||||||
//
|
//
|
||||||
// button2
|
// button2
|
||||||
//
|
//
|
||||||
this.button2.Location = new System.Drawing.Point(302, 729);
|
this.button2.Location = new System.Drawing.Point(301, 684);
|
||||||
this.button2.Name = "button2";
|
this.button2.Name = "button2";
|
||||||
this.button2.Size = new System.Drawing.Size(157, 23);
|
this.button2.Size = new System.Drawing.Size(157, 23);
|
||||||
this.button2.TabIndex = 2;
|
this.button2.TabIndex = 2;
|
||||||
@@ -193,7 +186,7 @@
|
|||||||
//
|
//
|
||||||
// button3
|
// button3
|
||||||
//
|
//
|
||||||
this.button3.Location = new System.Drawing.Point(62, 587);
|
this.button3.Location = new System.Drawing.Point(66, 537);
|
||||||
this.button3.Name = "button3";
|
this.button3.Name = "button3";
|
||||||
this.button3.Size = new System.Drawing.Size(120, 30);
|
this.button3.Size = new System.Drawing.Size(120, 30);
|
||||||
this.button3.TabIndex = 8;
|
this.button3.TabIndex = 8;
|
||||||
@@ -202,7 +195,7 @@
|
|||||||
//
|
//
|
||||||
// button4
|
// button4
|
||||||
//
|
//
|
||||||
this.button4.Location = new System.Drawing.Point(309, 587);
|
this.button4.Location = new System.Drawing.Point(279, 537);
|
||||||
this.button4.Name = "button4";
|
this.button4.Name = "button4";
|
||||||
this.button4.Size = new System.Drawing.Size(120, 30);
|
this.button4.Size = new System.Drawing.Size(120, 30);
|
||||||
this.button4.TabIndex = 9;
|
this.button4.TabIndex = 9;
|
||||||
@@ -215,9 +208,9 @@
|
|||||||
this.groupBox3.Controls.Add(this.labelOutputFolderPath);
|
this.groupBox3.Controls.Add(this.labelOutputFolderPath);
|
||||||
this.groupBox3.Controls.Add(this.textBox5);
|
this.groupBox3.Controls.Add(this.textBox5);
|
||||||
this.groupBox3.Controls.Add(this.label10);
|
this.groupBox3.Controls.Add(this.label10);
|
||||||
this.groupBox3.Location = new System.Drawing.Point(22, 413);
|
this.groupBox3.Location = new System.Drawing.Point(26, 368);
|
||||||
this.groupBox3.Name = "groupBox3";
|
this.groupBox3.Name = "groupBox3";
|
||||||
this.groupBox3.Size = new System.Drawing.Size(482, 115);
|
this.groupBox3.Size = new System.Drawing.Size(476, 115);
|
||||||
this.groupBox3.TabIndex = 12;
|
this.groupBox3.TabIndex = 12;
|
||||||
this.groupBox3.TabStop = false;
|
this.groupBox3.TabStop = false;
|
||||||
this.groupBox3.Text = "Output Setting";
|
this.groupBox3.Text = "Output Setting";
|
||||||
@@ -274,17 +267,17 @@
|
|||||||
//
|
//
|
||||||
// button6
|
// button6
|
||||||
//
|
//
|
||||||
this.button6.Location = new System.Drawing.Point(23, 269);
|
this.button6.Location = new System.Drawing.Point(91, 234);
|
||||||
this.button6.Name = "button6";
|
this.button6.Name = "button6";
|
||||||
this.button6.Size = new System.Drawing.Size(140, 23);
|
this.button6.Size = new System.Drawing.Size(140, 23);
|
||||||
this.button6.TabIndex = 18;
|
this.button6.TabIndex = 18;
|
||||||
this.button6.Text = "Select Main Image Folder";
|
this.button6.Text = "Main Image Folder";
|
||||||
this.button6.UseVisualStyleBackColor = true;
|
this.button6.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// label6
|
// label6
|
||||||
//
|
//
|
||||||
this.label6.AutoSize = true;
|
this.label6.AutoSize = true;
|
||||||
this.label6.Location = new System.Drawing.Point(169, 274);
|
this.label6.Location = new System.Drawing.Point(306, 239);
|
||||||
this.label6.Name = "label6";
|
this.label6.Name = "label6";
|
||||||
this.label6.Size = new System.Drawing.Size(93, 13);
|
this.label6.Size = new System.Drawing.Size(93, 13);
|
||||||
this.label6.TabIndex = 19;
|
this.label6.TabIndex = 19;
|
||||||
@@ -299,27 +292,20 @@
|
|||||||
this.label7.TabIndex = 20;
|
this.label7.TabIndex = 20;
|
||||||
this.label7.Text = "Polling Rate (in seconds)";
|
this.label7.Text = "Polling Rate (in seconds)";
|
||||||
//
|
//
|
||||||
// textBox7
|
// polling_rate_textbox
|
||||||
//
|
//
|
||||||
this.textBox7.Location = new System.Drawing.Point(150, 208);
|
this.polling_rate_textbox.Location = new System.Drawing.Point(150, 208);
|
||||||
this.textBox7.Name = "textBox7";
|
this.polling_rate_textbox.Name = "polling_rate_textbox";
|
||||||
this.textBox7.Size = new System.Drawing.Size(63, 20);
|
this.polling_rate_textbox.Size = new System.Drawing.Size(49, 20);
|
||||||
this.textBox7.TabIndex = 21;
|
this.polling_rate_textbox.TabIndex = 21;
|
||||||
//
|
//
|
||||||
// groupBox2
|
// groupBox2
|
||||||
//
|
//
|
||||||
this.groupBox2.Controls.Add(this.toast_box_group_box);
|
this.groupBox2.Controls.Add(this.toast_box_group_box);
|
||||||
this.groupBox2.Controls.Add(this.web_server_settings_groupbox);
|
this.groupBox2.Controls.Add(this.web_server_settings_groupbox);
|
||||||
this.groupBox2.Controls.Add(this.label13);
|
|
||||||
this.groupBox2.Controls.Add(this.comboBoxScrollSpeed);
|
|
||||||
this.groupBox2.Controls.Add(this.textBoxPauseTime);
|
|
||||||
this.groupBox2.Controls.Add(this.separatingcharacterformatbox);
|
|
||||||
this.groupBox2.Controls.Add(this.textBox6);
|
this.groupBox2.Controls.Add(this.textBox6);
|
||||||
this.groupBox2.Controls.Add(this.label11);
|
this.groupBox2.Controls.Add(this.label11);
|
||||||
this.groupBox2.Controls.Add(this.textBox9);
|
this.groupBox2.Controls.Add(this.polling_rate_textbox);
|
||||||
this.groupBox2.Controls.Add(this.label9);
|
|
||||||
this.groupBox2.Controls.Add(this.label8);
|
|
||||||
this.groupBox2.Controls.Add(this.textBox7);
|
|
||||||
this.groupBox2.Controls.Add(this.label7);
|
this.groupBox2.Controls.Add(this.label7);
|
||||||
this.groupBox2.Controls.Add(this.label6);
|
this.groupBox2.Controls.Add(this.label6);
|
||||||
this.groupBox2.Controls.Add(this.button6);
|
this.groupBox2.Controls.Add(this.button6);
|
||||||
@@ -336,7 +322,7 @@
|
|||||||
this.groupBox2.Controls.Add(this.comboBox1);
|
this.groupBox2.Controls.Add(this.comboBox1);
|
||||||
this.groupBox2.Location = new System.Drawing.Point(12, 100);
|
this.groupBox2.Location = new System.Drawing.Point(12, 100);
|
||||||
this.groupBox2.Name = "groupBox2";
|
this.groupBox2.Name = "groupBox2";
|
||||||
this.groupBox2.Size = new System.Drawing.Size(519, 623);
|
this.groupBox2.Size = new System.Drawing.Size(519, 578);
|
||||||
this.groupBox2.TabIndex = 3;
|
this.groupBox2.TabIndex = 3;
|
||||||
this.groupBox2.TabStop = false;
|
this.groupBox2.TabStop = false;
|
||||||
this.groupBox2.Text = "Profiles";
|
this.groupBox2.Text = "Profiles";
|
||||||
@@ -345,7 +331,7 @@
|
|||||||
//
|
//
|
||||||
this.toast_box_group_box.Controls.Add(this.toast_check_box_enable);
|
this.toast_box_group_box.Controls.Add(this.toast_check_box_enable);
|
||||||
this.toast_box_group_box.Controls.Add(this.toast_label);
|
this.toast_box_group_box.Controls.Add(this.toast_label);
|
||||||
this.toast_box_group_box.Location = new System.Drawing.Point(118, 534);
|
this.toast_box_group_box.Location = new System.Drawing.Point(120, 489);
|
||||||
this.toast_box_group_box.Name = "toast_box_group_box";
|
this.toast_box_group_box.Name = "toast_box_group_box";
|
||||||
this.toast_box_group_box.Size = new System.Drawing.Size(248, 42);
|
this.toast_box_group_box.Size = new System.Drawing.Size(248, 42);
|
||||||
this.toast_box_group_box.TabIndex = 4;
|
this.toast_box_group_box.TabIndex = 4;
|
||||||
@@ -379,9 +365,9 @@
|
|||||||
this.web_server_settings_groupbox.Controls.Add(this.web_server_port_label);
|
this.web_server_settings_groupbox.Controls.Add(this.web_server_port_label);
|
||||||
this.web_server_settings_groupbox.Controls.Add(this.web_server_label);
|
this.web_server_settings_groupbox.Controls.Add(this.web_server_label);
|
||||||
this.web_server_settings_groupbox.Controls.Add(this.web_server_checkbox);
|
this.web_server_settings_groupbox.Controls.Add(this.web_server_checkbox);
|
||||||
this.web_server_settings_groupbox.Location = new System.Drawing.Point(31, 308);
|
this.web_server_settings_groupbox.Location = new System.Drawing.Point(26, 263);
|
||||||
this.web_server_settings_groupbox.Name = "web_server_settings_groupbox";
|
this.web_server_settings_groupbox.Name = "web_server_settings_groupbox";
|
||||||
this.web_server_settings_groupbox.Size = new System.Drawing.Size(471, 99);
|
this.web_server_settings_groupbox.Size = new System.Drawing.Size(476, 99);
|
||||||
this.web_server_settings_groupbox.TabIndex = 35;
|
this.web_server_settings_groupbox.TabIndex = 35;
|
||||||
this.web_server_settings_groupbox.TabStop = false;
|
this.web_server_settings_groupbox.TabStop = false;
|
||||||
this.web_server_settings_groupbox.Text = "Web Server Settings";
|
this.web_server_settings_groupbox.Text = "Web Server Settings";
|
||||||
@@ -440,70 +426,6 @@
|
|||||||
this.web_server_checkbox.Text = "Enabled";
|
this.web_server_checkbox.Text = "Enabled";
|
||||||
this.web_server_checkbox.UseVisualStyleBackColor = true;
|
this.web_server_checkbox.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// label13
|
|
||||||
//
|
|
||||||
this.label13.AutoSize = true;
|
|
||||||
this.label13.Location = new System.Drawing.Point(20, 240);
|
|
||||||
this.label13.Name = "label13";
|
|
||||||
this.label13.Size = new System.Drawing.Size(142, 13);
|
|
||||||
this.label13.TabIndex = 32;
|
|
||||||
this.label13.Text = "Separating Character Format";
|
|
||||||
//
|
|
||||||
// comboBoxScrollSpeed
|
|
||||||
//
|
|
||||||
this.comboBoxScrollSpeed.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
|
||||||
this.comboBoxScrollSpeed.FormattingEnabled = true;
|
|
||||||
this.comboBoxScrollSpeed.Items.AddRange(new object[] {
|
|
||||||
"Very Slow",
|
|
||||||
"Slow",
|
|
||||||
"Medium",
|
|
||||||
"Fast",
|
|
||||||
"Very Fast"});
|
|
||||||
this.comboBoxScrollSpeed.Location = new System.Drawing.Point(382, 207);
|
|
||||||
this.comboBoxScrollSpeed.Name = "comboBoxScrollSpeed";
|
|
||||||
this.comboBoxScrollSpeed.Size = new System.Drawing.Size(97, 21);
|
|
||||||
this.comboBoxScrollSpeed.TabIndex = 29;
|
|
||||||
//
|
|
||||||
// textBoxPauseTime
|
|
||||||
//
|
|
||||||
this.textBoxPauseTime.Location = new System.Drawing.Point(382, 237);
|
|
||||||
this.textBoxPauseTime.Name = "textBoxPauseTime";
|
|
||||||
this.textBoxPauseTime.Size = new System.Drawing.Size(97, 20);
|
|
||||||
this.textBoxPauseTime.TabIndex = 30;
|
|
||||||
//
|
|
||||||
// separatingcharacterformatbox
|
|
||||||
//
|
|
||||||
this.separatingcharacterformatbox.Location = new System.Drawing.Point(164, 237);
|
|
||||||
this.separatingcharacterformatbox.Name = "separatingcharacterformatbox";
|
|
||||||
this.separatingcharacterformatbox.Size = new System.Drawing.Size(49, 20);
|
|
||||||
this.separatingcharacterformatbox.TabIndex = 31;
|
|
||||||
//
|
|
||||||
// textBox9
|
|
||||||
//
|
|
||||||
this.textBox9.Location = new System.Drawing.Point(382, 237);
|
|
||||||
this.textBox9.Name = "textBox9";
|
|
||||||
this.textBox9.Size = new System.Drawing.Size(97, 20);
|
|
||||||
this.textBox9.TabIndex = 25;
|
|
||||||
//
|
|
||||||
// label9
|
|
||||||
//
|
|
||||||
this.label9.AutoSize = true;
|
|
||||||
this.label9.Location = new System.Drawing.Point(239, 240);
|
|
||||||
this.label9.Name = "label9";
|
|
||||||
this.label9.Size = new System.Drawing.Size(119, 13);
|
|
||||||
this.label9.TabIndex = 24;
|
|
||||||
this.label9.Text = "Pause time (in seconds)";
|
|
||||||
//
|
|
||||||
// label8
|
|
||||||
//
|
|
||||||
this.label8.AutoSize = true;
|
|
||||||
this.label8.Location = new System.Drawing.Point(239, 211);
|
|
||||||
this.label8.Name = "label8";
|
|
||||||
this.label8.Size = new System.Drawing.Size(127, 13);
|
|
||||||
this.label8.TabIndex = 22;
|
|
||||||
this.label8.Text = "Scroll Speed (in Main UI)";
|
|
||||||
this.label8.Click += new System.EventHandler(this.label8_Click);
|
|
||||||
//
|
|
||||||
// label12
|
// label12
|
||||||
//
|
//
|
||||||
this.label12.AutoSize = true;
|
this.label12.AutoSize = true;
|
||||||
@@ -517,7 +439,7 @@
|
|||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(542, 764);
|
this.ClientSize = new System.Drawing.Size(542, 716);
|
||||||
this.Controls.Add(this.groupBox2);
|
this.Controls.Add(this.groupBox2);
|
||||||
this.Controls.Add(this.button2);
|
this.Controls.Add(this.button2);
|
||||||
this.Controls.Add(this.ok_button_master);
|
this.Controls.Add(this.ok_button_master);
|
||||||
@@ -566,18 +488,11 @@
|
|||||||
private System.Windows.Forms.Button button6;
|
private System.Windows.Forms.Button button6;
|
||||||
private System.Windows.Forms.Label label6;
|
private System.Windows.Forms.Label label6;
|
||||||
private System.Windows.Forms.Label label7;
|
private System.Windows.Forms.Label label7;
|
||||||
private System.Windows.Forms.TextBox textBox7;
|
private System.Windows.Forms.TextBox polling_rate_textbox;
|
||||||
private System.Windows.Forms.GroupBox groupBox2;
|
private System.Windows.Forms.GroupBox groupBox2;
|
||||||
private System.Windows.Forms.Label label8;
|
|
||||||
private System.Windows.Forms.TextBox textBox9;
|
|
||||||
private System.Windows.Forms.Label label9;
|
|
||||||
private System.Windows.Forms.ComboBox comboBox2;
|
private System.Windows.Forms.ComboBox comboBox2;
|
||||||
private System.Windows.Forms.TextBox textBox8;
|
private System.Windows.Forms.TextBox textBox8;
|
||||||
private System.Windows.Forms.Label label12;
|
private System.Windows.Forms.Label label12;
|
||||||
private System.Windows.Forms.ComboBox comboBoxScrollSpeed;
|
|
||||||
private System.Windows.Forms.TextBox textBoxPauseTime;
|
|
||||||
private System.Windows.Forms.TextBox separatingcharacterformatbox;
|
|
||||||
private System.Windows.Forms.Label label13;
|
|
||||||
private System.Windows.Forms.GroupBox web_server_settings_groupbox;
|
private System.Windows.Forms.GroupBox web_server_settings_groupbox;
|
||||||
private System.Windows.Forms.Label web_server_label;
|
private System.Windows.Forms.Label web_server_label;
|
||||||
private System.Windows.Forms.CheckBox web_server_checkbox;
|
private System.Windows.Forms.CheckBox web_server_checkbox;
|
||||||
|
|||||||
@@ -20,15 +20,6 @@ namespace RadioDJViewer
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
textBox4.UseSystemPasswordChar = true; // Obscure password field
|
textBox4.UseSystemPasswordChar = true; // Obscure password field
|
||||||
comboBoxScrollSpeed.Items.Clear();
|
|
||||||
comboBoxScrollSpeed.Items.AddRange(new object[] {
|
|
||||||
"Very Slow",
|
|
||||||
"Slow",
|
|
||||||
"Medium",
|
|
||||||
"Fast",
|
|
||||||
"Very Fast"
|
|
||||||
});
|
|
||||||
comboBoxScrollSpeed.SelectedItem = "Medium";
|
|
||||||
this.buttonSelectOutputFolder.Click += ButtonSelectOutputFolder_Click;
|
this.buttonSelectOutputFolder.Click += ButtonSelectOutputFolder_Click;
|
||||||
this.button6.Click += ButtonSelectMainImagesFolder_Click;
|
this.button6.Click += ButtonSelectMainImagesFolder_Click;
|
||||||
this.button3.Click += button3_Click;
|
this.button3.Click += button3_Click;
|
||||||
@@ -74,10 +65,7 @@ namespace RadioDJViewer
|
|||||||
textBox5.Text = profile.OutputImageName;
|
textBox5.Text = profile.OutputImageName;
|
||||||
textBox1.Text = profile.UrlFormat;
|
textBox1.Text = profile.UrlFormat;
|
||||||
// Default polling rate to 3 if missing or zero
|
// Default polling rate to 3 if missing or zero
|
||||||
textBox7.Text = (profile.PollingRateSeconds > 0 ? profile.PollingRateSeconds : 3).ToString();
|
polling_rate_textbox.Text = (profile.PollingRateSeconds > 0 ? profile.PollingRateSeconds : 3).ToString();
|
||||||
comboBoxScrollSpeed.SelectedItem = profile.MarqueeScrollSpeed ?? "Medium";
|
|
||||||
textBoxPauseTime.Text = profile.MarqueePauseTime > 0 ? profile.MarqueePauseTime.ToString() : "6";
|
|
||||||
separatingcharacterformatbox.Text = profile.MarqueeSeparator ?? " | ";
|
|
||||||
// Web server settings
|
// Web server settings
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -125,7 +113,7 @@ namespace RadioDJViewer
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int pollingRate = 3;
|
int pollingRate = 3;
|
||||||
int.TryParse(textBox7.Text, out pollingRate);
|
int.TryParse(polling_rate_textbox.Text, out pollingRate);
|
||||||
var profile = new Profile
|
var profile = new Profile
|
||||||
{
|
{
|
||||||
Name = textBox6.Text,
|
Name = textBox6.Text,
|
||||||
@@ -137,9 +125,9 @@ namespace RadioDJViewer
|
|||||||
OutputImageName = textBox5.Text,
|
OutputImageName = textBox5.Text,
|
||||||
UrlFormat = textBox1.Text,
|
UrlFormat = textBox1.Text,
|
||||||
PollingRateSeconds = pollingRate,
|
PollingRateSeconds = pollingRate,
|
||||||
MarqueeScrollSpeed = comboBoxScrollSpeed.SelectedItem?.ToString() ?? "Medium",
|
MarqueeScrollSpeed = "Medium",
|
||||||
MarqueePauseTime = int.TryParse(textBoxPauseTime.Text, out int pt) ? pt : 6,
|
MarqueePauseTime = 6,
|
||||||
MarqueeSeparator = separatingcharacterformatbox.Text,
|
MarqueeSeparator = " | ",
|
||||||
// Web server settings
|
// Web server settings
|
||||||
WebServerEnabled = web_server_checkbox.Checked,
|
WebServerEnabled = web_server_checkbox.Checked,
|
||||||
WebServerPort = int.TryParse(web_server_port_textbox.Text, out int wp) ? wp : 8080,
|
WebServerPort = int.TryParse(web_server_port_textbox.Text, out int wp) ? wp : 8080,
|
||||||
|
|||||||
Reference in New Issue
Block a user