using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.ServiceProcess; using System.Runtime.InteropServices; using System.Text; using JCMLib; namespace FireflyConfig { /// /// Summary description for Form1. /// /// public enum ServiceStatus { Unintialized, Running, Stopped, Unknown } public class FireflyConfig : System.Windows.Forms.Form { private System.Drawing.Icon icnRunning; private System.Drawing.Icon icnStopped; private System.Drawing.Icon icnUnknown; private Timer timerRefresh; private System.ServiceProcess.ServiceController scFirefly; private ServiceStatus iState = ServiceStatus.Unintialized; private bool closeFromMenu = false; private string strPort; private string strServerName; private string strMusicDir; private string strPassword; private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label4; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.TextBox textBoxPort; private System.Windows.Forms.TextBox textBoxServerName; private System.Windows.Forms.TextBox textBoxMusicDir; private System.Windows.Forms.Button buttonBrowseDir; private System.Windows.Forms.MenuItem menuItemStart; private System.Windows.Forms.MenuItem menuItemStop; private System.Windows.Forms.MenuItem menuItemConfigure; private System.Windows.Forms.ContextMenu trayMenu; private NotifyIconEx notifyIcon; private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog; private System.Windows.Forms.MenuItem menuItemExit; private System.Windows.Forms.Button buttonOK; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.TextBox textBoxPassword; private System.Windows.Forms.CheckBox checkBoxPassword; private System.ComponentModel.IContainer components; public void ServiceStatusUpdate() { scFirefly.Refresh(); ServiceStatus iOldState = iState; switch(scFirefly.Status) { case System.ServiceProcess.ServiceControllerStatus.Stopped: iState = ServiceStatus.Stopped; break; case System.ServiceProcess.ServiceControllerStatus.Running: iState = ServiceStatus.Running; break; default: iState = ServiceStatus.Unknown; break; } if(iState != iOldState) { switch(iState) { case ServiceStatus.Stopped: menuItemStart.Enabled = true; menuItemStop.Enabled = false; notifyIcon.Icon = icnStopped; notifyIcon.Text = "Firefly Media Server is stopped"; notifyIcon.ShowBalloon("Firefly Server","Server is stopped",JCMLib.NotifyIconEx.NotifyInfoFlags.Info,5000); break; case ServiceStatus.Running: menuItemStart.Enabled = false; menuItemStop.Enabled = true; notifyIcon.Icon = icnRunning; notifyIcon.Text = "Firefly Media Server is running"; notifyIcon.ShowBalloon("Firefly Server","Server is running",JCMLib.NotifyIconEx.NotifyInfoFlags.Info,5000); break; case ServiceStatus.Unknown: menuItemStart.Enabled = false; menuItemStop.Enabled = false; notifyIcon.Icon = icnUnknown; notifyIcon.Text = "Cannot connect to Firefly Media Server"; notifyIcon.ShowBalloon("Firefly Server","Cannot contact media server",JCMLib.NotifyIconEx.NotifyInfoFlags.Warning,5000); break; } } } public FireflyConfig() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // /* grab the icons */ System.IO.Stream st; System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly(); st = a.GetManifestResourceStream("FireflyConfig.ff_run.ico"); icnRunning = new System.Drawing.Icon(st); st = a.GetManifestResourceStream("FireflyConfig.ff_stop.ico"); icnStopped = new System.Drawing.Icon(st); st = a.GetManifestResourceStream("FireflyConfig.ff_unknown.ico"); icnUnknown = new System.Drawing.Icon(st); /* grab the service handle */ scFirefly = new System.ServiceProcess.ServiceController("Firefly Media Server"); /* set up the poller for service state */ timerRefresh = new Timer(); timerRefresh.Interval = 5000; timerRefresh.Enabled=true; timerRefresh.Start(); timerRefresh.Tick += new EventHandler(timerRefresh_Tick); this.Visible=false; } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } protected void LoadIni() { string path = Environment.CurrentDirectory + "\\mt-daapd.conf"; IniFile ifConfig = new IniFile(path); strPort = ifConfig.IniReadValue("general","port"); strServerName = ifConfig.IniReadValue("general","servername"); strMusicDir = ifConfig.IniReadValue("general","mp3_dir"); strPassword = ifConfig.IniReadValue("general","password"); textBoxPort.Text = strPort; textBoxServerName.Text = strServerName; textBoxMusicDir.Text = strMusicDir; textBoxPassword.Text = strPassword; if((strPassword == "") || (strPassword == null)) { checkBoxPassword.Checked = false; textBoxPassword.Enabled = false; } else { checkBoxPassword.Checked = true; textBoxPassword.Enabled = true; } } public void timerRefresh_Tick(object sender, EventArgs eArgs) { if(sender == timerRefresh) { ServiceStatusUpdate(); } } #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() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FireflyConfig)); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.checkBoxPassword = new System.Windows.Forms.CheckBox(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.textBoxPassword = new System.Windows.Forms.TextBox(); this.textBoxPort = new System.Windows.Forms.TextBox(); this.textBoxServerName = new System.Windows.Forms.TextBox(); this.textBoxMusicDir = new System.Windows.Forms.TextBox(); this.buttonBrowseDir = new System.Windows.Forms.Button(); this.buttonOK = new System.Windows.Forms.Button(); this.buttonCancel = new System.Windows.Forms.Button(); this.trayMenu = new System.Windows.Forms.ContextMenu(); this.menuItemConfigure = new System.Windows.Forms.MenuItem(); this.menuItemStart = new System.Windows.Forms.MenuItem(); this.menuItemStop = new System.Windows.Forms.MenuItem(); this.menuItemExit = new System.Windows.Forms.MenuItem(); this.notifyIcon = new JCMLib.NotifyIconEx(); this.folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog(); this.groupBox1.SuspendLayout(); this.SuspendLayout(); // // label1 // this.label1.Location = new System.Drawing.Point(8, 18); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(80, 16); this.label1.TabIndex = 0; this.label1.Text = "Port:"; // // label2 // this.label2.Location = new System.Drawing.Point(8, 79); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(88, 23); this.label2.TabIndex = 4; this.label2.Text = "Music Directory:"; // // label3 // this.label3.Location = new System.Drawing.Point(8, 47); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(80, 23); this.label3.TabIndex = 2; this.label3.Text = "Server Name:"; // // label4 // this.label4.Location = new System.Drawing.Point(16, 50); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(56, 16); this.label4.TabIndex = 1; this.label4.Text = "Password:"; // // checkBoxPassword // this.checkBoxPassword.Location = new System.Drawing.Point(16, 16); this.checkBoxPassword.Name = "checkBoxPassword"; this.checkBoxPassword.Size = new System.Drawing.Size(184, 24); this.checkBoxPassword.TabIndex = 0; this.checkBoxPassword.Text = "Use Music Library Password"; this.checkBoxPassword.CheckedChanged += new System.EventHandler(this.checkBoxPassword_CheckedChanged); // // groupBox1 // this.groupBox1.Controls.Add(this.textBoxPassword); this.groupBox1.Controls.Add(this.checkBoxPassword); this.groupBox1.Controls.Add(this.label4); this.groupBox1.Location = new System.Drawing.Point(8, 112); this.groupBox1.Name = "groupBox1"; this.groupBox1.Size = new System.Drawing.Size(240, 80); this.groupBox1.TabIndex = 7; this.groupBox1.TabStop = false; this.groupBox1.Text = "Passsword"; // // textBoxPassword // this.textBoxPassword.Location = new System.Drawing.Point(80, 48); this.textBoxPassword.Name = "textBoxPassword"; this.textBoxPassword.Size = new System.Drawing.Size(144, 20); this.textBoxPassword.TabIndex = 2; this.textBoxPassword.Text = ""; // // textBoxPort // this.textBoxPort.Location = new System.Drawing.Point(96, 16); this.textBoxPort.Name = "textBoxPort"; this.textBoxPort.Size = new System.Drawing.Size(48, 20); this.textBoxPort.TabIndex = 1; this.textBoxPort.Text = ""; // // textBoxServerName // this.textBoxServerName.Location = new System.Drawing.Point(96, 48); this.textBoxServerName.Name = "textBoxServerName"; this.textBoxServerName.Size = new System.Drawing.Size(152, 20); this.textBoxServerName.TabIndex = 3; this.textBoxServerName.Text = ""; // // textBoxMusicDir // this.textBoxMusicDir.Location = new System.Drawing.Point(96, 80); this.textBoxMusicDir.Name = "textBoxMusicDir"; this.textBoxMusicDir.Size = new System.Drawing.Size(120, 20); this.textBoxMusicDir.TabIndex = 5; this.textBoxMusicDir.Text = ""; // // buttonBrowseDir // this.buttonBrowseDir.Location = new System.Drawing.Point(224, 80); this.buttonBrowseDir.Name = "buttonBrowseDir"; this.buttonBrowseDir.Size = new System.Drawing.Size(24, 20); this.buttonBrowseDir.TabIndex = 6; this.buttonBrowseDir.Text = "..."; this.buttonBrowseDir.Click += new System.EventHandler(this.buttonBrowseDir_Click); // // buttonOK // this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; this.buttonOK.Location = new System.Drawing.Point(8, 216); this.buttonOK.Name = "buttonOK"; this.buttonOK.Size = new System.Drawing.Size(80, 24); this.buttonOK.TabIndex = 8; this.buttonOK.Text = "&Ok"; this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); // // buttonCancel // this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.buttonCancel.Location = new System.Drawing.Point(168, 216); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(80, 24); this.buttonCancel.TabIndex = 9; this.buttonCancel.Text = "&Cancel"; this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); // // trayMenu // this.trayMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItemConfigure, this.menuItemStart, this.menuItemStop, this.menuItemExit}); // // menuItemConfigure // this.menuItemConfigure.DefaultItem = true; this.menuItemConfigure.Index = 0; this.menuItemConfigure.Text = "&Configure Firefly Media Server..."; this.menuItemConfigure.Click += new System.EventHandler(this.menuItemConfigure_Click); // // menuItemStart // this.menuItemStart.Enabled = false; this.menuItemStart.Index = 1; this.menuItemStart.Text = "S&tart Firefly Media Server"; this.menuItemStart.Click += new System.EventHandler(this.menuItemStart_Click); // // menuItemStop // this.menuItemStop.Enabled = false; this.menuItemStop.Index = 2; this.menuItemStop.Text = "&Stop Firefly Media Server"; this.menuItemStop.Click += new System.EventHandler(this.menuItemStop_Click); // // menuItemExit // this.menuItemExit.Index = 3; this.menuItemExit.Text = "E&xit"; this.menuItemExit.Click += new System.EventHandler(this.menuItemExit_Click); // // notifyIcon // this.notifyIcon.ContextMenu = this.trayMenu; this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); this.notifyIcon.Text = "Firefly Media Server"; this.notifyIcon.Visible = true; this.notifyIcon.DoubleClick += new System.EventHandler(this.notifyIcon_DoubleClick); // // FireflyConfig // this.AcceptButton = this.buttonOK; this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.CancelButton = this.buttonCancel; this.ClientSize = new System.Drawing.Size(256, 246); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOK); this.Controls.Add(this.buttonBrowseDir); this.Controls.Add(this.textBoxMusicDir); this.Controls.Add(this.textBoxServerName); this.Controls.Add(this.textBoxPort); this.Controls.Add(this.groupBox1); this.Controls.Add(this.label3); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "FireflyConfig"; this.ShowInTaskbar = false; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; this.Text = "Configuration"; this.WindowState = System.Windows.Forms.FormWindowState.Minimized; this.Resize += new System.EventHandler(this.FireflyConfig_Resize); this.Closing += new System.ComponentModel.CancelEventHandler(this.FireflyConfig_Closing); this.Load += new System.EventHandler(this.FireflyConfig_Load); this.groupBox1.ResumeLayout(false); this.ResumeLayout(false); } #endregion /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.Run(new FireflyConfig()); } private void notifyIcon_DoubleClick(object sender, System.EventArgs e) { LoadIni(); Show(); WindowState = FormWindowState.Normal; ShowInTaskbar = true; } private void FireflyConfig_Closing(object sender, System.ComponentModel.CancelEventArgs e) { if(!closeFromMenu) { e.Cancel=true; this.WindowState = FormWindowState.Minimized; } else { notifyIcon.Visible = false; } } private void FireflyConfig_Resize(object sender, System.EventArgs e) { if(FormWindowState.Minimized == WindowState) { Hide(); } } private void menuItemExit_Click(object sender, System.EventArgs e) { closeFromMenu = true; Close(); } private void FireflyConfig_Load(object sender, System.EventArgs e) { Hide(); } private void menuItemConfigure_Click(object sender, System.EventArgs e) { LoadIni(); Show(); WindowState = FormWindowState.Normal; ShowInTaskbar = true; } private void menuItemStart_Click(object sender, System.EventArgs e) { scFirefly.Start(); } private void menuItemStop_Click(object sender, System.EventArgs e) { scFirefly.Stop(); } private void checkBoxPassword_CheckedChanged(object sender, System.EventArgs e) { textBoxPassword.Enabled = checkBoxPassword.Checked; } private void buttonCancel_Click(object sender, System.EventArgs e) { Hide(); } private void buttonBrowseDir_Click(object sender, System.EventArgs e) { folderBrowserDialog.SelectedPath = textBoxMusicDir.Text; if(folderBrowserDialog.ShowDialog() == DialogResult.OK) { textBoxMusicDir.Text = folderBrowserDialog.SelectedPath; } } private void buttonOK_Click(object sender, System.EventArgs e) { System.Windows.Forms.DialogResult result; bool changed=false; string strNewPassword; strNewPassword = textBoxPassword.Text; if(checkBoxPassword.Checked == false) strNewPassword = ""; if(textBoxPort.Text != strPort) changed = true; if(textBoxServerName.Text != strServerName) changed = true; if(textBoxMusicDir.Text != strMusicDir) changed = true; if(strNewPassword != strPassword) changed = true; if(changed) { result = MessageBox.Show("Changing these values will require a restart of the Firefly Media Server. Are you sure you want to do this?", "Restart Confirmation",System.Windows.Forms.MessageBoxButtons.YesNoCancel); if(result == DialogResult.Yes) { /* write the values */ string path = Environment.CurrentDirectory + "\\mt-daapd.conf"; IniFile ifConfig = new IniFile(path); ifConfig.IniWriteValue("general","port",textBoxPort.Text); ifConfig.IniWriteValue("general","servername",textBoxServerName.Text); ifConfig.IniWriteValue("general","mp3_dir",textBoxMusicDir.Text); ifConfig.IniWriteValue("general","password",strNewPassword); try { timerRefresh.Enabled = false; notifyIcon.ShowBalloon("Firefly Server","Stopping Firefly Media Server",JCMLib.NotifyIconEx.NotifyInfoFlags.Info,5000); scFirefly.Stop(); scFirefly.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped,new TimeSpan(0,0,30)); notifyIcon.ShowBalloon("Firefly Server","Starting Firefly Media Server",JCMLib.NotifyIconEx.NotifyInfoFlags.Info,5000); scFirefly.Start(); notifyIcon.ShowBalloon("Firefly Server","Started Firefly Media Server",JCMLib.NotifyIconEx.NotifyInfoFlags.Info,5000); timerRefresh.Enabled = true; } catch (Exception ex) { ex = ex; MessageBox.Show("Error restarting server"); }; Hide(); } else if(result == DialogResult.No) { Hide(); } } else { Hide(); } } } public class IniFile { public string path; [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key,string val,string filePath); [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key,string def, StringBuilder retVal, int size,string filePath); /// /// INIFile Constructor. /// /// public IniFile(string INIPath) { path = INIPath; } /// /// Write Data to the INI File /// /// /// Section name /// /// Key Name /// /// Value Name public void IniWriteValue(string Section,string Key,string Value) { WritePrivateProfileString(Section,Key,Value,this.path); } /// /// Read Data Value From the Ini File /// /// /// /// /// public string IniReadValue(string Section,string Key) { StringBuilder temp = new StringBuilder(4096); int i = GetPrivateProfileString(Section,Key,"",temp, 4096, this.path); return temp.ToString(); } } }