using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.Win32; using System.Net; using System.Net.Sockets; using System.IO; using System.Threading; using System.Globalization; using System.Runtime.InteropServices; using System.Reflection; using System.Diagnostics; using AirScout.PlaneFeeds; using AirScout.PlaneFeeds.Generic; using System.Configuration; using System.Xml; using System.Xml.Serialization; using System.Deployment; using System.Deployment.Application; using System.Security.Cryptography; using GMap.NET; using GMap.NET.MapProviders; using GMap.NET.WindowsForms; using GMap.NET.WindowsForms.Markers; using GMap.NET.WindowsForms.ToolTips; using AirScout.Database.Flightradar; using System.Collections; using AirScout.Database.Core; using ScoutBase.Core; using ScoutBase.Data; using ScoutBase.Elevation; namespace AirScoutPlaneServer { public partial class MainDlg : Form { string AppName = "AirScout PlaneServer"; // temp variable for local culture private CultureInfo LocalCulture; // private Flightradar FlightRadar; private LogWriter Log; GMapOverlay gmo_Planes_Coverage = new GMapOverlay("Coveragepolygons"); private DateTime StartupTime; [CategoryAttribute("Directories")] [DescriptionAttribute("Application Directory")] public string AppDirectory { get { return Application.StartupPath.TrimEnd(Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar); } } [CategoryAttribute("Directories")] [DescriptionAttribute("Local Application Data Directory")] public string AppDataDirectory { get { return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.CompanyName, Application.ProductName).TrimEnd(Path.DirectorySeparatorChar); } } [CategoryAttribute("Directories")] [DescriptionAttribute("Logfile Directory")] public string LogDirectory { get { return VC.ReplaceAllVars(Properties.Settings.Default.Log_Directory).TrimEnd(Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar); } } [CategoryAttribute("Directories")] [DescriptionAttribute("Tempfile Directory")] public string TmpDirectory { get { return VC.ReplaceAllVars(Properties.Settings.Default.Tmp_Directory).TrimEnd(Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar); } } [CategoryAttribute("Directories")] [DescriptionAttribute("Database Directory")] public string DatabaseDirectory { get { return VC.ReplaceAllVars(Properties.Settings.Default.Database_Directory).TrimEnd(Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar); } } [CategoryAttribute("Directories")] [DescriptionAttribute("Icon Directory")] public string IconDirectory { get { return VC.ReplaceAllVars(Properties.Settings.Default.Icon_Directory).TrimEnd(Path.DirectorySeparatorChar).Replace('\\', Path.DirectorySeparatorChar); } } [CategoryAttribute("Directories")] [DescriptionAttribute("Icon Path")] public string IconPath { get { return Path.Combine(IconDirectory, Properties.Settings.Default.Icon_Filename); } } private ELEVATIONMODEL model; [CategoryAttribute("Elevation")] [DescriptionAttribute("Elevation Model")] public ELEVATIONMODEL Model { get { return model; } set { model = value; } } VarConverter VC; public ArrayList PlaneFeeds; public PlaneFeed bw_WebFeed1; public PlaneFeed bw_WebFeed2; public PlaneFeed bw_WebFeed3; public MainDlg() { // save current local LocalCulture LocalCulture = Application.CurrentCulture; // force culture invariant language for GUI Application.CurrentCulture = CultureInfo.InvariantCulture; // Initailize variables VC = new VarConverter(); VC.AddVar("APPDIR", AppDirectory); VC.AddVar("DATADIR", AppDataDirectory); VC.AddVar("LOGDIR", LogDirectory); VC.AddVar("DATABASEDIR", DatabaseDirectory); VC.AddVar("MINLAT", Properties.Settings.Default.Planes_MinLat); VC.AddVar("MAXLAT", Properties.Settings.Default.Planes_MaxLat); VC.AddVar("MINLON", Properties.Settings.Default.Planes_MinLon); VC.AddVar("MAXLON", Properties.Settings.Default.Planes_MaxLon); VC.AddVar("MINALTM", Properties.Settings.Default.Planes_MinAlt); VC.AddVar("MAXALTM", Properties.Settings.Default.Planes_MaxAlt); VC.AddVar("MINALTFT", (int)UnitConverter.m_ft((double)Properties.Settings.Default.Planes_MinAlt)); VC.AddVar("MAXALTFT", (int)UnitConverter.m_ft((double)Properties.Settings.Default.Planes_MaxAlt)); // initilaize web feeds selection boxes and background workers InitializeWebFeeds(); InitializeComponent(); // uprade settings from previous versions on first run (if not Linux) if (Properties.Settings.Default.Application_FirstRun && !SupportFunctions.IsMono) { Console.WriteLine("First run..."); Properties.Settings.Default.Upgrade(); foreach (SettingsPropertyValue p in Properties.Settings.Default.PropertyValues) { Console.WriteLine(p.Name + ":" + p.PropertyValue.ToString()); } } // open database if (Properties.Settings.Default.WebFeed1_Settings != null) { Console.WriteLine("WebFeed1 Settings:" + Properties.Settings.Default.WebFeed1_Settings.URL); } if (Properties.Settings.Default.WebFeed2_Settings != null) { Console.WriteLine("WebFeed2 Settings:" + Properties.Settings.Default.WebFeed2_Settings.URL); } if (Properties.Settings.Default.WebFeed3_Settings != null) { Console.WriteLine("WebFeed3 Settings:" + Properties.Settings.Default.WebFeed3_Settings.URL); } // load application icon here Icon = new Icon(IconPath); // load notifictaion icon here (if not Linux) if (!SupportFunctions.IsMono) ni_Main.Icon = new Icon(IconPath); // check for all necessary directories CheckDirectories(); // implement an Idle procedure // Application.Idle += new EventHandler(OnIdle); // configure LogWriter ScoutBase.Core.Properties.Settings.Default.LogWriter_Directory = LogDirectory; ScoutBase.Core.Properties.Settings.Default.LogWriter_FileFormat = Application.ProductName + "_{0:yyyy-MM-dd}.log"; ScoutBase.Core.Properties.Settings.Default.LogWriter_MessageFormat = "{0:u}: {1}"; Log = LogWriter.Instance; Console.WriteLine("Initializing logfile in: " + LogDirectory); Log.WriteMessage(Application.ProductName + " is starting up.", 0, false); Model = ELEVATIONMODEL.GLOBE; // initialize database InitializeDatabase(); // set initial settings for planes tab cb_WebFeed1.DisplayMember = "Name"; cb_WebFeed2.DisplayMember = "Name"; cb_WebFeed3.DisplayMember = "Name"; cb_WebFeed1.Items.Clear(); cb_WebFeed2.Items.Clear(); cb_WebFeed3.Items.Clear(); cb_WebFeed1.Items.Add("[none]"); cb_WebFeed2.Items.Add("[none]"); cb_WebFeed3.Items.Add("[none]"); // get installed plane feeds ArrayList feeds = new PlaneFeedEnumeration().EnumFeeds(); foreach (PlaneFeed feed in feeds) { cb_WebFeed1.Items.Add(feed); cb_WebFeed2.Items.Add(feed); cb_WebFeed3.Items.Add(feed); } cb_WebFeed1.SelectedIndex = cb_WebFeed1.FindStringExact(Properties.Settings.Default.Planes_WebFeed1); cb_WebFeed2.SelectedIndex = cb_WebFeed1.FindStringExact(Properties.Settings.Default.Planes_WebFeed2); cb_WebFeed3.SelectedIndex = cb_WebFeed1.FindStringExact(Properties.Settings.Default.Planes_WebFeed3); double d = ElevationData.Database[51, 10, Model]; } private void InitializeDatabase() { Log.WriteMessage("Initialize database: " + AircraftDatabase_old.GetDBLocation()); } private void InitializeWebFeeds() { // get available plane feeds PlaneFeeds = new PlaneFeedEnumeration().EnumFeeds(); // set plane feed event handler foreach (PlaneFeed feed in PlaneFeeds) { feed.ProgressChanged += new ProgressChangedEventHandler(bw_WebFeed_ProgressChanged); } PlaneFeedWorkEventArgs args = new PlaneFeedWorkEventArgs(); args.AppDirectory = AppDirectory; args.AppDataDirectory = AppDataDirectory; args.LogDirectory = LogDirectory; args.TmpDirectory = TmpDirectory; args.DatabaseDirectory = DatabaseDirectory; args.MinLon = (double)Properties.Settings.Default.Planes_MinLon; args.MaxLon = (double)Properties.Settings.Default.Planes_MaxLon; args.MinLat = (double)Properties.Settings.Default.Planes_MinLat; args.MaxLat = (double)Properties.Settings.Default.Planes_MaxLat; args.MinAlt = (int)Properties.Settings.Default.Planes_MinAlt; args.MaxAlt = (int)Properties.Settings.Default.Planes_MaxAlt; // select feeds and start them foreach (PlaneFeed feed in PlaneFeeds) { if (Properties.Settings.Default.Planes_WebFeed1 == feed.Name) { bw_WebFeed1 = feed; bw_WebFeed1.RunWorkerAsync(args); } if (Properties.Settings.Default.Planes_WebFeed2 == feed.Name) { bw_WebFeed2 = feed; bw_WebFeed2.RunWorkerAsync(args); } if (Properties.Settings.Default.Planes_WebFeed3 == feed.Name) { bw_WebFeed3 = feed; bw_WebFeed3.RunWorkerAsync(args); } } } private void btn_Close_Click(object sender, EventArgs e) { // close window this.Close(); } private void MainDlg_Load(object sender, EventArgs e) { // start minimized if enabled if (Properties.Settings.Default.Windows_Startup_Minimized) { WindowState = FormWindowState.Minimized; } else { WindowState = FormWindowState.Normal; } // reset FirstRun flag Properties.Settings.Default.Application_FirstRun = false; // set initial settings for CoverageMap // setting User Agent to fix Open Street Map issue 2016-09-20 GMap.NET.MapProviders.GMapProvider.UserAgent = "AirScout"; // clearing referrer URL issue 2019-12-14 gm_Planes_Coverage.MapProvider.RefererUrl = ""; gm_Planes_Coverage.MapProvider = GMapProviders.Find(Properties.Settings.Default.Planes_MapProvider); gm_Planes_Coverage.IgnoreMarkerOnMouseWheel = true; gm_Planes_Coverage.MinZoom = 0; gm_Planes_Coverage.MaxZoom = 20; gm_Planes_Coverage.Zoom = 6; gm_Planes_Coverage.DragButton = System.Windows.Forms.MouseButtons.Left; gm_Planes_Coverage.CanDragMap = true; gm_Planes_Coverage.ScalePen = new Pen(Color.Black, 3); gm_Planes_Coverage.HelperLinePen = null; gm_Planes_Coverage.SelectionPen = null; gm_Planes_Coverage.MapScaleInfoEnabled = true; gm_Planes_Coverage.Overlays.Add(gmo_Planes_Coverage); // keep startup time StartupTime = DateTime.UtcNow; // start database // enable/disable functions cb_WebFeed1_Active_CheckedChanged(this, null); cb_WebFeed2_Active_CheckedChanged(this, null); cb_WebFeed3_Active_CheckedChanged(this, null); cb_Log_Active_CheckedChanged(this, null); cb_Server_Active_CheckedChanged(this, null); // start timer ti_Main.Enabled = true; ti_Main.Start(); // start background workers bw_JSONWriter.RunWorkerAsync(); bw_DatabaseUpdater.RunWorkerAsync(); } #region Misc Functions private void Say(string s) { if ((s != null) && (tsl_Main.Text != s)) { tsl_Main.Text = s; ss_Main.Update(); } } #endregion #region Directory Functions private void CheckDirectories() { // check if all direcrtories exist --> create them if not if (!Directory.Exists(LogDirectory)) Directory.CreateDirectory(LogDirectory); if (!Directory.Exists(TmpDirectory)) Directory.CreateDirectory(TmpDirectory); if (!Directory.Exists(AppDataDirectory)) Directory.CreateDirectory(AppDataDirectory); if (!Directory.Exists(DatabaseDirectory)) Directory.CreateDirectory(DatabaseDirectory); if (!Directory.Exists(IconDirectory)) Directory.CreateDirectory(IconDirectory); } #endregion private void OnIdle(object sender, EventArgs args) { } private void MainDlg_FormClosing(object sender, FormClosingEventArgs e) { // clean up map gm_Planes_Coverage.Dispose(); // save user settings SaveUserSettings(); // close database updater bw_DatabaseUpdater.CancelAsync(); // close JSON writer bw_JSONWriter.CancelAsync(); // close webserver bw_Webserver.CancelAsync(); // close all feeds if (bw_WebFeed1 != null) bw_WebFeed1.CancelAsync(); if (bw_WebFeed2 != null) bw_WebFeed2.CancelAsync(); if (bw_WebFeed3 != null) bw_WebFeed3.CancelAsync(); bw_ADSBFeed.CancelAsync(); // stop timer ti_Main.Stop(); // close database } private void MainDlg_FormClosed(object sender, FormClosedEventArgs e) { Log.WriteMessage(Application.ProductName + " is closed.", 0, false); } private void MainDlg_Resize(object sender, EventArgs e) { // cut window to normal size when maximized if (WindowState == FormWindowState.Maximized) WindowState = FormWindowState.Normal; // move to systray when enabled (not under Linux) if (!SupportFunctions.IsMono && (WindowState == FormWindowState.Minimized)) { if (Properties.Settings.Default.Windows_Startup_Systray) { ni_Main.Visible = true; ni_Main.BalloonTipText = "AirScout PlaneServer minimized to systray."; ni_Main.ShowBalloonTip(500); this.Hide(); this.ShowInTaskbar = false; } } } private void tsi_Restore_Click(object sender, EventArgs e) { this.Show(); WindowState = FormWindowState.Normal; this.ShowInTaskbar = true; ni_Main.Visible = false; } private void tsi_Close_Click(object sender, EventArgs e) { // close window this.Close(); } private void cms_NotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e) { this.Show(); WindowState = FormWindowState.Normal; this.ShowInTaskbar = true; ni_Main.Visible = false; } private void cms_NotifyIcon_Opening(object sender, CancelEventArgs e) { tsi_Restore.Select(); } private void cb_Windows_Startup_Autorun_CheckedChanged(object sender, EventArgs e) { // try to manage an autorun on Windows startup // this does not work with Linux // this may not work with Windows 8 or later versions try { // The path to the key where Windows looks for startup applications RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); if (cb_Windows_Startup_Autorun.Checked) { // Add the value in the registry so that the application runs at startup rkApp.SetValue(AppName, Application.ExecutablePath.ToString()); } else { // Remove the value from the registry so that the application doesn't start rkApp.DeleteValue(AppName, false); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error while accessing registry key"); } } private void SaveUserSettings() { Log.WriteMessage("Saving configuration..."); Properties.Settings.Default.Save(); Console.WriteLine("Creating XML document..."); XmlDocument doc = new XmlDocument(); XmlDeclaration xmlDeclaration = doc.CreateXmlDeclaration("1.0", "UTF-8", null); XmlElement root = doc.DocumentElement; doc.InsertBefore(xmlDeclaration, root); XmlElement configuration = doc.CreateElement(string.Empty, "configuration", string.Empty); doc.AppendChild(configuration); XmlElement configsections = doc.CreateElement(string.Empty, "configSections", string.Empty); configuration.AppendChild(configsections); XmlElement usersettingsgroup = doc.CreateElement(string.Empty, "sectionGroup", string.Empty); XmlAttribute usersettingsname = doc.CreateAttribute(string.Empty, "name", string.Empty); usersettingsname.InnerText = "userSettings"; usersettingsgroup.Attributes.Append(usersettingsname); XmlElement usersection = doc.CreateElement(string.Empty, "section", string.Empty); XmlAttribute sectionname = doc.CreateAttribute(string.Empty, "name", string.Empty); sectionname.InnerText = "AirScout.PlaneFeeds.Properties.Settings"; usersection.Attributes.Append(sectionname); XmlAttribute sectiontype = doc.CreateAttribute(string.Empty, "type", string.Empty); sectiontype.InnerText = "System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; usersection.Attributes.Append(sectiontype); XmlAttribute sectionallowexedefinition = doc.CreateAttribute(string.Empty, "allowExeDefinition", string.Empty); sectionallowexedefinition.InnerText = "MachineToLocalUser"; usersection.Attributes.Append(sectionallowexedefinition); XmlAttribute sectionrequirepermission = doc.CreateAttribute(string.Empty, "requirePermission", string.Empty); sectionrequirepermission.InnerText = "false"; usersection.Attributes.Append(sectionrequirepermission); usersettingsgroup.AppendChild(usersection); configsections.AppendChild(usersettingsgroup); XmlElement usersettings = doc.CreateElement(string.Empty, "userSettings", string.Empty); configuration.AppendChild(usersettings); XmlElement properties = doc.CreateElement(string.Empty, Properties.Settings.Default.ToString(), string.Empty); usersettings.AppendChild(properties); Console.WriteLine("Writing Properties.Settings..."); foreach (SettingsPropertyValue p in Properties.Settings.Default.PropertyValues) { Console.WriteLine(string.Concat(new object[] { "Writing ", p.Name, " = ", p.PropertyValue })); XmlElement setting = doc.CreateElement(string.Empty, "setting", string.Empty); XmlAttribute name = doc.CreateAttribute(string.Empty, "name", string.Empty); name.InnerText = p.Name.ToString(); setting.Attributes.Append(name); XmlAttribute serializeas = doc.CreateAttribute(string.Empty, "serializeAs", string.Empty); serializeas.InnerText = p.Property.SerializeAs.ToString(); setting.Attributes.Append(serializeas); XmlElement value = doc.CreateElement(string.Empty, "value", string.Empty); if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.String) { XmlText text = doc.CreateTextNode(p.PropertyValue.ToString()); value.AppendChild(text); } else { if (p.PropertyValue != null && p.Property.SerializeAs == SettingsSerializeAs.Xml) { MemoryStream ms = new MemoryStream(); XmlWriter writer = XmlWriter.Create(ms, new XmlWriterSettings { NewLineOnAttributes = true, OmitXmlDeclaration = true }); XmlSerializer serializer = new XmlSerializer(p.PropertyValue.GetType()); serializer.Serialize(writer, p.PropertyValue); byte[] text2 = new byte[ms.ToArray().Length - 3]; Array.Copy(ms.ToArray(), 3, text2, 0, text2.Length); XmlText xml = doc.CreateTextNode(Encoding.UTF8.GetString(text2.ToArray())); value.AppendChild(xml); value.InnerXml = WebUtility.HtmlDecode(value.InnerXml); } } setting.AppendChild(value); properties.AppendChild(setting); } string usersettingspath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); usersettingspath = Path.Combine(usersettingspath, Application.CompanyName, AppDomain.CurrentDomain.FriendlyName); usersettingspath += "_Url_"; Assembly assembly = Assembly.GetEntryAssembly(); if (assembly == null) { assembly = Assembly.GetCallingAssembly(); } byte[] pkt = assembly.GetName().GetPublicKeyToken(); byte[] hash = SHA1.Create().ComputeHash((pkt != null && pkt.Length > 0) ? pkt : Encoding.UTF8.GetBytes(assembly.EscapedCodeBase)); StringBuilder evidence_string = new StringBuilder(); byte[] array = hash; for (int i = 0; i < array.Length; i++) { byte b = array[i]; evidence_string.AppendFormat("{0:x2}", b); } usersettingspath += evidence_string.ToString(); if (!Directory.Exists(usersettingspath)) { Directory.CreateDirectory(usersettingspath); } usersettingspath = Path.Combine(usersettingspath, "user.config"); doc.Save(usersettingspath); } # region User Interface private void btn_Log_Directory_Click(object sender, EventArgs e) { FolderBrowserDialog Dlg = new FolderBrowserDialog(); Dlg.SelectedPath = LogDirectory; Dlg.ShowNewFolderButton = true; Dlg.Description = "Select Logfile Directory"; if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { tb_Log_Directory.Text = Dlg.SelectedPath; CheckDirectories(); } } private void cb_Log_Active_CheckedChanged(object sender, EventArgs e) { if (cb_Log_Active.Checked) { // disable directory change tb_Log_Directory.Enabled = false; btn_Log_Directory.Enabled = false; // set logfile path if path exists if (Directory.Exists(LogDirectory)) ScoutBase.Core.Properties.Settings.Default.LogWriter_Directory = LogDirectory; } else { // enable directory change tb_Log_Directory.Enabled = true; btn_Log_Directory.Enabled = true; } } private void btn_Log_Show_Click(object sender, EventArgs e) { OpenFileDialog Dlg = new OpenFileDialog(); Dlg.DefaultExt = ".log"; Dlg.Filter = "Log Files | *.log"; Dlg.InitialDirectory = LogDirectory; Dlg.CheckFileExists = true; if (Dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK) { Process.Start(Dlg.FileName); } } private void ti_Main_Tick(object sender, EventArgs e) { // check and update status TimeSpan uptime = DateTime.UtcNow - StartupTime; tsl_Uptime.Text = uptime.ToString(@"d\.hh\:mm\:ss"); // get performance counter values and avoid exceptions try { tsl_CPULoad.Text = "cpu: " + SupportFunctions.CPUCounter.GetLoad().ToString("F0") + " %"; tsl_MemoryAvailable.Text = "free: " + SupportFunctions.MemoryCounter.GetAvailable().ToString("F0") + " MB"; } catch (Exception ex) { tsl_CPULoad.Text = "cpu: " + "***"; tsl_MemoryAvailable.Text = "free: " + "***"; } tsl_DBSize.Text = "DB: " + AircraftDatabase_old.GetDBSize().ToString("F0") + " MB"; } private void Planes_AdjustMap() { gmo_Planes_Coverage.Clear(); // add tile to map polygons List l = new List(); l.Add(new PointLatLng(Properties.Settings.Default.Planes_MinLat, Properties.Settings.Default.Planes_MinLon)); l.Add(new PointLatLng(Properties.Settings.Default.Planes_MinLat, Properties.Settings.Default.Planes_MaxLon)); l.Add(new PointLatLng(Properties.Settings.Default.Planes_MaxLat, Properties.Settings.Default.Planes_MaxLon)); l.Add(new PointLatLng(Properties.Settings.Default.Planes_MaxLat, Properties.Settings.Default.Planes_MinLon)); GMapPolygon p = new GMapPolygon(l, "Coverage"); p.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3); p.Fill = new SolidBrush(Color.FromArgb(0, Color.Magenta)); gmo_Planes_Coverage.Polygons.Add(p); // zoom the map gm_Planes_Coverage.SetZoomToFitRect(RectLatLng.FromLTRB((double)Properties.Settings.Default.Planes_MinLon - 1, (double)Properties.Settings.Default.Planes_MaxLat + 1, (double)Properties.Settings.Default.Planes_MaxLon + 1, (double)Properties.Settings.Default.Planes_MinLat - 1)); } private void tab_Planes_Enter(object sender, EventArgs e) { Planes_AdjustMap(); } private void ud_Planes_LatLon_ValueChanged(object sender, EventArgs e) { Planes_AdjustMap(); } private void tp_WebFeed1_Enter(object sender, EventArgs e) { cb_WebFeed1.SelectedIndex = cb_WebFeed1.FindStringExact(Properties.Settings.Default.Planes_WebFeed1); } private void tp_WebFeed2_Enter(object sender, EventArgs e) { cb_WebFeed2.SelectedIndex = cb_WebFeed1.FindStringExact(Properties.Settings.Default.Planes_WebFeed2); } private void tp_WebFeed3_Enter(object sender, EventArgs e) { cb_WebFeed3.SelectedIndex = cb_WebFeed1.FindStringExact(Properties.Settings.Default.Planes_WebFeed3); } private void cb_WebFeed1_Active_CheckedChanged(object sender, EventArgs e) { /* if (cb_WebFeed1_Active.Checked) { if (!bw_WebFeed1.IsBusy) { if (Properties.Settings.Default.WebFeed1_Settings != null) { PlaneFeedWorkEventArgs args = new PlaneFeedWorkEventArgs(); args.AppDirectory = AppDirectory; args.AppDataDirectory = AppDataDirectory; args.LogDirectory = LogDirectory; args.TmpDirectory = TmpDirectory; args.DatabaseDirectory = DatabaseDirectory; args.MinLon = (double)Properties.Settings.Default.Planes_MinLon; args.MaxLon = (double)Properties.Settings.Default.Planes_MaxLon; args.MinLat = (double)Properties.Settings.Default.Planes_MinLat; args.MaxLat = (double)Properties.Settings.Default.Planes_MaxLat; args.MinAlt = (int)Properties.Settings.Default.Planes_MinAlt; args.MaxAlt = (int)Properties.Settings.Default.Planes_MaxAlt; bw_WebFeed1.RunWorkerAsync(args); } } } else { if (bw_WebFeed1.IsBusy) bw_WebFeed1.CancelAsync(); } // enable/disable property grid pg_WebFeed1.Enabled = !cb_WebFeed1_Active.Checked; */ } private void cb_WebFeed2_Active_CheckedChanged(object sender, EventArgs e) { /* if (cb_WebFeed2_Active.Checked) { if (!bw_WebFeed2.IsBusy) { if (Properties.Settings.Default.WebFeed2_Settings != null) { PlaneFeedWorkEventArgs args = new PlaneFeedWorkEventArgs(); args.AppDirectory = AppDirectory; args.AppDataDirectory = AppDataDirectory; args.LogDirectory = LogDirectory; args.TmpDirectory = TmpDirectory; args.DatabaseDirectory = DatabaseDirectory; args.MinLon = (double)Properties.Settings.Default.Planes_MinLon; args.MaxLon = (double)Properties.Settings.Default.Planes_MaxLon; args.MinLat = (double)Properties.Settings.Default.Planes_MinLat; args.MaxLat = (double)Properties.Settings.Default.Planes_MaxLat; args.MinAlt = (int)Properties.Settings.Default.Planes_MinAlt; args.MaxAlt = (int)Properties.Settings.Default.Planes_MaxAlt; bw_WebFeed2.RunWorkerAsync(args); } } } else { if (bw_WebFeed2.IsBusy) bw_WebFeed2.CancelAsync(); } // enable/disable property grid pg_WebFeed2.Enabled = !cb_WebFeed2_Active.Checked; */ } private void cb_WebFeed3_Active_CheckedChanged(object sender, EventArgs e) { /* if (cb_WebFeed3_Active.Checked) { if (!bw_WebFeed3.IsBusy) { if (Properties.Settings.Default.WebFeed3_Settings != null) { PlaneFeedWorkEventArgs args = new PlaneFeedWorkEventArgs(); args.AppDirectory = AppDirectory; args.AppDataDirectory = AppDataDirectory; args.LogDirectory = LogDirectory; args.TmpDirectory = TmpDirectory; args.DatabaseDirectory = DatabaseDirectory; args.MinLon = (double)Properties.Settings.Default.Planes_MinLon; args.MaxLon = (double)Properties.Settings.Default.Planes_MaxLon; args.MinLat = (double)Properties.Settings.Default.Planes_MinLat; args.MaxLat = (double)Properties.Settings.Default.Planes_MaxLat; args.MinAlt = (int)Properties.Settings.Default.Planes_MinAlt; args.MaxAlt = (int)Properties.Settings.Default.Planes_MaxAlt; bw_WebFeed3.RunWorkerAsync(args); } } } else { if (bw_WebFeed3.IsBusy) bw_WebFeed3.CancelAsync(); } // enable/disable property grid pg_WebFeed3.Enabled = !cb_WebFeed3_Active.Checked; */ } private void cb_WebFeed1_SelectedIndexChanged(object sender, EventArgs e) { if ((cb_WebFeed1.SelectedItem == null) || (cb_WebFeed1.GetItemText(cb_WebFeed1.SelectedItem) == "[none]")) { pg_WebFeed1.Enabled = false; btn_WebFeed1_Import.Enabled = false; btn_WebFeed1_Export.Enabled = false; bw_WebFeed1 = null; Properties.Settings.Default.Planes_WebFeed1 = "[none]"; return; } // get the selected type of feed PlaneFeed feed = (PlaneFeed)cb_WebFeed1.SelectedItem; // check for changes if ((bw_WebFeed1 == null) || bw_WebFeed1.Name != feed.Name) { // stop background worker if (bw_WebFeed1 != null) { bw_WebFeed1.CancelAsync(); while (bw_WebFeed1.IsBusy) Application.DoEvents(); } // select feed foreach (PlaneFeed newfeed in PlaneFeeds) { if (feed.Name == newfeed.Name) bw_WebFeed1 = newfeed; } PlaneFeedWorkEventArgs args = new PlaneFeedWorkEventArgs(); args.AppDirectory = AppDirectory; args.AppDataDirectory = AppDataDirectory; args.LogDirectory = LogDirectory; args.TmpDirectory = TmpDirectory; args.DatabaseDirectory = DatabaseDirectory; args.MinLon = (double)Properties.Settings.Default.Planes_MinLon; args.MaxLon = (double)Properties.Settings.Default.Planes_MaxLon; args.MinLat = (double)Properties.Settings.Default.Planes_MinLat; args.MaxLat = (double)Properties.Settings.Default.Planes_MaxLat; args.MinAlt = (int)Properties.Settings.Default.Planes_MinAlt; args.MaxAlt = (int)Properties.Settings.Default.Planes_MaxAlt; bw_WebFeed1.RunWorkerAsync(args); } pg_WebFeed1.SelectedObject = bw_WebFeed1.GetFeedSettings(); pg_WebFeed1.Enabled = feed.HasSettings; btn_WebFeed1_Import.Enabled = feed.CanImport; btn_WebFeed1_Export.Enabled = feed.CanExport; Properties.Settings.Default.Planes_WebFeed1 = feed.Name; } private void cb_WebFeed2_SelectedIndexChanged(object sender, EventArgs e) { if ((cb_WebFeed2.SelectedItem == null) || (cb_WebFeed2.GetItemText(cb_WebFeed2.SelectedItem) == "[none]")) { pg_WebFeed2.Enabled = false; btn_WebFeed2_Import.Enabled = false; btn_WebFeed2_Export.Enabled = false; bw_WebFeed2 = null; Properties.Settings.Default.Planes_WebFeed2 = "[none]"; return; } // get the selected type of feed PlaneFeed feed = (PlaneFeed)cb_WebFeed2.SelectedItem; // check for changes if ((bw_WebFeed2 == null) || bw_WebFeed2.Name != feed.Name) { // stop background worker if (bw_WebFeed2 != null) { bw_WebFeed2.CancelAsync(); while (bw_WebFeed2.IsBusy) Application.DoEvents(); } // select feed foreach (PlaneFeed newfeed in PlaneFeeds) { if (feed.Name == newfeed.Name) bw_WebFeed2 = newfeed; } PlaneFeedWorkEventArgs args = new PlaneFeedWorkEventArgs(); args.AppDirectory = AppDirectory; args.AppDataDirectory = AppDataDirectory; args.LogDirectory = LogDirectory; args.TmpDirectory = TmpDirectory; args.DatabaseDirectory = DatabaseDirectory; args.MinLon = (double)Properties.Settings.Default.Planes_MinLon; args.MaxLon = (double)Properties.Settings.Default.Planes_MaxLon; args.MinLat = (double)Properties.Settings.Default.Planes_MinLat; args.MaxLat = (double)Properties.Settings.Default.Planes_MaxLat; args.MinAlt = (int)Properties.Settings.Default.Planes_MinAlt; args.MaxAlt = (int)Properties.Settings.Default.Planes_MaxAlt; bw_WebFeed2.RunWorkerAsync(args); } pg_WebFeed2.SelectedObject = bw_WebFeed2.GetFeedSettings(); pg_WebFeed2.Enabled = feed.HasSettings; btn_WebFeed2_Import.Enabled = feed.CanImport; btn_WebFeed2_Export.Enabled = feed.CanExport; Properties.Settings.Default.Planes_WebFeed2 = feed.Name; } private void cb_WebFeed3_SelectedIndexChanged(object sender, EventArgs e) { if ((cb_WebFeed3.SelectedItem == null) || (cb_WebFeed3.GetItemText(cb_WebFeed3.SelectedItem) == "[none]")) { pg_WebFeed3.Enabled = false; btn_WebFeed3_Import.Enabled = false; btn_WebFeed3_Export.Enabled = false; bw_WebFeed3 = null; Properties.Settings.Default.Planes_WebFeed3 = "[none]"; return; } // get the selected type of feed PlaneFeed feed = (PlaneFeed)cb_WebFeed3.SelectedItem; // check for changes if ((bw_WebFeed3 == null) || bw_WebFeed3.Name != feed.Name) { // stop background worker if (bw_WebFeed3 != null) { bw_WebFeed3.CancelAsync(); while (bw_WebFeed3.IsBusy) Application.DoEvents(); } // select feed foreach (PlaneFeed newfeed in PlaneFeeds) { if (feed.Name == newfeed.Name) bw_WebFeed3 = newfeed; } PlaneFeedWorkEventArgs args = new PlaneFeedWorkEventArgs(); args.AppDirectory = AppDirectory; args.AppDataDirectory = AppDataDirectory; args.LogDirectory = LogDirectory; args.TmpDirectory = TmpDirectory; args.DatabaseDirectory = DatabaseDirectory; args.MinLon = (double)Properties.Settings.Default.Planes_MinLon; args.MaxLon = (double)Properties.Settings.Default.Planes_MaxLon; args.MinLat = (double)Properties.Settings.Default.Planes_MinLat; args.MaxLat = (double)Properties.Settings.Default.Planes_MaxLat; args.MinAlt = (int)Properties.Settings.Default.Planes_MinAlt; args.MaxAlt = (int)Properties.Settings.Default.Planes_MaxAlt; bw_WebFeed3.RunWorkerAsync(args); } pg_WebFeed3.SelectedObject = bw_WebFeed3.GetFeedSettings(); pg_WebFeed3.Enabled = feed.HasSettings; btn_WebFeed3_Import.Enabled = feed.CanImport; btn_WebFeed3_Export.Enabled = feed.CanExport; Properties.Settings.Default.Planes_WebFeed3 = feed.Name; } private void btn_WebFeed1_Import_Click(object sender, EventArgs e) { bw_WebFeed1.Import(); } private void btn_WebFeed2_Import_Click(object sender, EventArgs e) { bw_WebFeed2.Import(); } private void btn_WebFeed3_Import_Click(object sender, EventArgs e) { bw_WebFeed3.Import(); } private void btn_WebFeed1_Export_Click(object sender, EventArgs e) { bw_WebFeed1.Export(); } private void btn_WebFeed2_Export_Click(object sender, EventArgs e) { bw_WebFeed2.Export(); } private void btn_WebFeed3_Export_Click(object sender, EventArgs e) { bw_WebFeed3.Export(); } private void bw_WebFeed_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (e.ProgressPercentage == (int)PROGRESS.STATUS) { if (e.UserState == null) return; // NASTY: shorten the message text if too long string s = (string)e.UserState; int maxlen = 50; if (s.Length > maxlen) { try { // cut the string intelligent s = s.Remove(s.IndexOf("from"), s.IndexOf(",")-s.IndexOf("from")); } catch { // simple cut the string s = s.Substring(0, maxlen); } } this.Say(s); } else if (e.ProgressPercentage == (int)PROGRESS.FINISHED) { } } private void tp_Database_Enter(object sender, EventArgs e) { // udpate database status tb_Database_Location.Text = AircraftDatabase_old.GetDBLocation(); tb_Database_Filesize.Text = AircraftDatabase_old.GetDBSize().ToString("F0"); tb_Database_PlanePositions_RowCount.Text = AircraftDatabase_old.GetAircraftPositionsCount().ToString(); } private void cb_Server_Active_CheckedChanged(object sender, EventArgs e) { if (this.cb_Server_Active.Checked) { if (!this.bw_Webserver.IsBusy) { this.bw_Webserver.RunWorkerAsync(); } } else { this.bw_Webserver.CancelAsync(); } } #endregion } }