Exemplo n.º 1
0
        public void LoadFlightReport(string debriefer, string loggerFile, bool noDisplay = false)
        {
            Trace.WriteLine("Loading " + loggerFile, "ENGINE");
            Reset();

            Report = FlightReport.Load(debriefer, loggerFile, Settings);

            if (Report.OriginalTrack.Length > 0)
            {
                if (!noDisplay)
                {
                    Display();
                }

                RaisePropertyChanged("Log");
                RaisePropertyChanged("Report");
                RaisePropertyChanged("Results");
                RaisePropertyChanged("Penalties");
            }
            else
            {
                Report = null;
                throw new InvalidOperationException("No valid points in track");
            }
        }
Exemplo n.º 2
0
        //factory
        public static FlightReport Load(string debriefer, string filePath, FlightSettings settings)
        {
            FlightReport report = null;

            var ext = Path.GetExtension(filePath).ToLower();

            if (ext == SerializedFileExtension)
            {
                //deserialize report
                report = ObjectSerializer <FlightReport> .Load(filePath, serializationFormat);

                report.Debriefer = debriefer;
                report.DoTrackCleanUp();
            }
            else
            {
                var logFile = LoggerFile.Load(filePath, settings.UtcOffset, settings.AltitudeCorrectionsFileName);

                //check pilot id
                var pilotId = logFile.PilotId;
                if (pilotId == 0)
                {
                    //try to get the pilot Id from filename
                    //The file name must contain a P or p followed with pilot number (1 to 3 digits)
                    //examples: f001_p021_l0.trk, Flight01P001.trk, 20120530AM_p01.trk, 0530AMP02_1.trk
                    var pattern = @"P(\d{1,3})";
                    var input   = Path.GetFileName(filePath);
                    var matches = Regex.Matches(input, pattern, RegexOptions.IgnoreCase);
                    if (matches.Count == 1)
                    {
                        pilotId = int.Parse(matches[0].Groups[1].Value);
                    }

                    if (pilotId == 0)
                    {
                        throw new Exception(
                                  "The pilot id is not present in the track log file and it could not be inferred from the file name.\n" +
                                  "The file name must contain a P or p followed with pilot number (1 to 3 digits)\n" +
                                  "examples: f001_p021_l0.trk, Flight01P001.trk, 20120530AM_p01.trk, 0530AMP02_1.trk"
                                  );
                    }
                }

                //Convert geographical coordinates to AX coordinates
                var tracklog = logFile.GetTrackLog();
                var track    = new AXPoint[tracklog.Length];
                Parallel.For(0, track.Length, i =>
                {
                    track[i] = settings.FromGeoToAXPoint(tracklog[i], logFile.IsAltitudeBarometric);
                });

                var markers = new ObservableCollection <AXWaypoint>();
                foreach (var m in logFile.GetMarkers())
                {
                    markers.Add(settings.FromGeoToAXWaypoint(m, logFile.IsAltitudeBarometric));
                }

                var declarations = new ObservableCollection <GoalDeclaration>();
                foreach (var d in logFile.GetGoalDeclarations())
                {
                    declarations.Add(d);
                }

                //Make new report
                report = new FlightReport(settings)
                {
                    Debriefer          = debriefer,
                    IsDirty            = true,
                    LogFile            = logFile,
                    SignatureStatus    = logFile.SignatureStatus,
                    pilotId            = pilotId, //don't use PilotId on constructor!
                    LoggerModel        = logFile.LoggerModel,
                    LoggerSerialNumber = logFile.LoggerSerialNumber,
                    OriginalTrack      = track,
                    Markers            = markers,
                    DeclaredGoals      = declarations,
                    Notes = new ObservableCollection <string>()
                };

                switch (logFile.SignatureStatus)
                {
                case SignatureStatus.NotSigned:
                    report.Notes.Add("The log file is not signed");
                    break;

                case SignatureStatus.Genuine:
                    report.Notes.Add("The log file has a valid signature");
                    break;

                case SignatureStatus.Counterfeit:
                    report.Notes.Add("*** THE LOG FILE HAS AN INVALID SIGNATURE! ***");
                    break;
                }

                report.DoTrackCleanUp();
                report.DetectTakeOffAndLanding();
            }

            return(report);
        }