/// <summary> /// Creates a new session. /// </summary> private void StartSession() { lock (_SyncLock) { if (_Session == null) { if (!_Options.Enabled) { Status = PluginStrings.Disabled; StatusDescription = null; } else if (String.IsNullOrEmpty(_Database.FileName)) { Status = PluginStrings.EnabledNoDatabase; StatusDescription = null; } else if (!Provider.FileExists(_Database.FileName)) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.SomethingDoesNotExist, _Database.FileName); } else if (Provider.FileSize(_Database.FileName) == 0L) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.SomethingIsZeroLength, _Database.FileName); } else if (!_Options.AllowUpdateOfOtherDatabases && !DatabaseCreatedByPlugin()) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = PluginStrings.UpdatingDatabasesNotCreatedByPluginForbidden; } else { Status = String.Format(PluginStrings.EnabledAndUpdatingSomething, _Database.FileName); StatusDescription = null; try { _Database.WriteSupportEnabled = true; var location = _Database.GetLocations().OrderBy(c => c.LocationID).FirstOrDefault(); _Session = new BaseStationSession() { LocationID = location == null ? 0 : location.LocationID, StartTime = Provider.LocalNow, }; _Database.InsertSession(_Session); } catch (ThreadAbortException) { } catch (Exception ex) { Debug.WriteLine(String.Format("BaseStationDatabaseWriter.Plugin.StartSession caught exception {0}", ex.ToString())); Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.ExceptionCaughtWhenStartingSession, ex.Message); Factory.Singleton.Resolve <ILog>().Singleton.WriteLine("Database writer plugin caught exception on starting session: {0}", ex.ToString()); } } OnStatusChanged(EventArgs.Empty); } } }
/// <summary> /// Imports Session records. /// </summary> /// <param name="source"></param> /// <param name="dest"></param> private void ProcessSessions(IBaseStationDatabaseSQLite source, IBaseStationDatabase dest) { _SessionMap.Clear(); if (!ImportSessions) { WriteLog("Session import skipped"); } else if (!ImportLocations) { WriteLog("Session import skipped because location import was skipped"); } else { WriteLog("Importing Session records"); var allSource = source.GetSessions(); var allDest = dest.GetSessions(); foreach (var rec in allSource) { if (_LocationMap.TryGetValue(rec.LocationID, out var destLocationID)) { var sourceID = rec.SessionID; rec.LocationID = destLocationID; var existing = allDest.FirstOrDefault(r => r.SessionID > 0 && r.StartTime == rec.StartTime); if (existing == null) { rec.SessionID = 0; dest.InsertSession(rec); } else { rec.SessionID = existing.SessionID; dest.UpdateSession(rec); } _SessionMap.Add(sourceID, rec.SessionID); } } WriteLog($" Imported {allSource.Count:N0} sessions"); } }
/// <summary> /// Creates a new session. /// </summary> private void StartSession() { var feedManager = Factory.Singleton.Resolve <IFeedManager>().Singleton; lock (_SyncLock) { if (_Session == null) { if (!_Options.Enabled) { Status = PluginStrings.Disabled; StatusDescription = null; } else if (_Options.ReceiverId == 0) { Status = PluginStrings.EnabledNoReceiver; } else if (feedManager.GetByUniqueId(_Options.ReceiverId, ignoreInvisibleFeeds: false) == null) { Status = PluginStrings.EnabledBadReceiver; } else if (String.IsNullOrEmpty(_Database.FileName)) { Status = PluginStrings.EnabledNoDatabase; StatusDescription = null; } else if (!Provider.FileExists(_Database.FileName)) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.SomethingDoesNotExist, _Database.FileName); } else if (Provider.FileSize(_Database.FileName) == 0L) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = String.Format(PluginStrings.SomethingIsZeroLength, _Database.FileName); } else if (!_Options.AllowUpdateOfOtherDatabases && !DatabaseCreatedByPlugin()) { Status = PluginStrings.EnabledNotUpdating; StatusDescription = PluginStrings.UpdatingDatabasesNotCreatedByPluginForbidden; } else { Status = String.Format(PluginStrings.EnabledAndUpdatingSomething, _Database.FileName); StatusDescription = null; try { _Database.WriteSupportEnabled = true; var location = _Database.GetLocations().OrderBy(c => c.LocationID).FirstOrDefault(); _Session = new BaseStationSession() { LocationID = location == null ? 0 : location.LocationID, StartTime = Provider.LocalNow, }; _Database.InsertSession(_Session); _OnlineLookupCache.Enabled = _Session != null && _Options.SaveDownloadedAircraftDetails; } catch (ThreadAbortException) { } catch (Exception ex) { AbandonSession(ex, PluginStrings.ExceptionCaughtWhenStartingSession); Debug.WriteLine(String.Format("BaseStationDatabaseWriter.Plugin.StartSession caught exception {0}", ex.ToString())); Factory.Singleton.Resolve <ILog>().Singleton.WriteLine("Database writer plugin caught exception on starting session: {0}", ex.ToString()); } } } } }