Пример #1
0
        private void ReadConfigFile()
        {
            // Read in the config file
            IEnumerable <string> lines = File.ReadLines(_configPath);
            string installDataLine     = null;

            foreach (string line in lines)
            {
                if (line.Contains(Settings.Default.MorrowindInstallPath))
                {
                    installDataLine = line;
                }
                else if (line.StartsWith(DataLine.DataLinePrefix))
                {
                    DataLines.Add(new DataLine(line));
                }
                else if (line.StartsWith("content"))
                {
                    _contentLines.Add(line);
                }
                else
                {
                    _nonDataLines.Add(line);
                }
            }

            _nonDataLines.Add(installDataLine);
        }
Пример #2
0
        private void CreateDataLinesForMods()
        {
            string modsDir = Path.Combine(Settings.Default.OpenMwUserFilesPath, ModsDirectoryName);

            string[] modDirs = Directory.GetDirectories(modsDir);

            // remove lines that don't correspond to mod dirs
            foreach (DataLine line in DataLines)
            {
                if (!modDirs.Contains(line.DirPath))
                {
                    DataLines.Remove(line);
                }
            }

            // add lines for new mod directories
            foreach (string dir in modDirs)
            {
                if (DataLines.Any(line => line.DirPath.Equals(dir)))
                {
                    continue;
                }

                DataLine modLine = DataLine.FromModPath(dir);
                DataLines.Add(modLine);
            }

            WriteDataLinesToConfig();
        }
Пример #3
0
        private void CreateDataLinesForMods()
        {
            if (!HasValidPaths())
            {
                MessageBox.Show("You cannot sync your mods unless you specify valid install/user file paths!", "Invalid Paths", MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }

            string[] modDirs = Directory.GetDirectories(ModsDirectoryPath);

            // remove lines that don't correspond to mod dirs
            for (int i = DataLines.Count - 1; i >= 0; i--)
            {
                DataLine line = DataLines[i];
                if (!modDirs.Contains(line.DirPath))
                {
                    DataLines.RemoveAt(i);
                }
            }

            // add lines for new mod directories
            foreach (string dir in modDirs)
            {
                if (DataLines.Any(line => line.DirPath.Equals(dir)))
                {
                    continue;
                }

                DataLine modLine = DataLine.FromModPath(dir);
                DataLines.Add(modLine);
            }

            WriteDataLinesToConfig();
            MessageBox.Show("Mods synced!", "Operation Complete", MessageBoxButton.OK, MessageBoxImage.Information);
        }
Пример #4
0
        private void WriteDataLinesToConfig()
        {
            List <string>        dataLines = DataLines.Select(line => line.Line).ToList();
            IEnumerable <string> concat    = _nonDataLines.Concat(dataLines).Concat(_contentLines);

            File.WriteAllLines(_configPath, concat);
        }
Пример #5
0
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainVM();

            StartTimerTick();
            DataLines.InitializeLines();
        }
Пример #6
0
        private void MoveDown(DataLine line)
        {
            if (line == null)
            {
                return;
            }

            int oldIndex = DataLines.IndexOf(line);
            int newIndex = (oldIndex + 1) <= (DataLines.Count - 1) ? oldIndex + 1 : DataLines.Count - 1;

            DataLines.Move(oldIndex, newIndex);
        }
Пример #7
0
        private void MoveUp(DataLine line)
        {
            if (line == null)
            {
                return;
            }

            int oldIndex = DataLines.IndexOf(line);
            int newIndex = (oldIndex - 1 >= 0) ? oldIndex - 1 : 0;

            DataLines.Move(oldIndex, newIndex);
        }
        public override void WriteMetadata(ILogger writer, CancellationToken cancelletionToken = default(CancellationToken))
        {
            CreateMetadataHeader(writer);

            String subFolder = this.project.Folder + "\\" + this.SubFolder;

            writer.WriteLineInfo("Data location:           " + subFolder);
            writer.WriteLineInfo(" ");

            if (Directory.Exists(subFolder) == false)
            {
                writer.WriteLineInfo("!!!   Folder does not exist! Data stream is missing!");
                writer.WriteLineWarning(this.Name + ":Folder does not exist! Data stream is missing!");
                return;
            }

            string rootFolder = project.Folder + "\\" + this.SubFolder + "\\";

            string[] allFiles = Directory.GetFiles(rootFolder, "*.*", SearchOption.AllDirectories);
            string[] files    = allFiles.Where(s => s.EndsWith(".JPG")).ToArray();

            foreach (String file in files)
            {
                cancelletionToken.ThrowIfCancellationRequested();

                DateTime fileTime = File.GetLastWriteTimeUtc(file);
                String   subFile  = file.Replace(rootFolder, "");
                this.DataLines.Add(new ImageDataLine(subFile, fileTime, TimeType.FILE));
            }


            writer.WriteLineInfo("\t        Total number of images : " + DataLines.Count());
            writer.WriteLineInfo("\t            First file created : " + this.StartTime);
            writer.WriteLineInfo("\t             Last file created : " + this.EndTime);
            writer.WriteLineInfo("\t              Frame per second : " + (DataLines.Count() / this.Length).ToString("0.000") + " [fps]");
            writer.WriteLineInfo("\t                     Frequency : " + (this.Length / files.Count()).ToString("0.000") + " [Hz]");

            this.OrderDataLines();

            if (files.Count() == 0)
            {
                writer.WriteLineInfo("Empty folder!");
                writer.WriteLineWarning(this.Name + ":Empty folder!");
            }

            int dn = Math.Abs(allFiles.Count() - files.Count());

            if (dn != 0)
            {
                writer.WriteLineInfo("\t     No. of unidentified files : " + dn);
                writer.WriteLineWarning(this.Name + ":Number of unidentified files in the folder: " + dn);
            }
        }
Пример #9
0
        public WCFComm(ref DataLines lineData)
        {
            lineArray = lineData;
            NetTcpBinding binding = new NetTcpBinding();
            binding.Security.Mode = SecurityMode.None; 
            EndpointAddress address = new EndpointAddress("net.tcp://localhost:47999/DiPlotComm/");

            _isDataSourceConnected = false;

            _sourceCallback = new InstanceContext(this);

            _hostEndPoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(IDiPlot)),
                                                        binding,
                                                        address);
        }
Пример #10
0
        public override void WriteMetadata(ILogger writer, CancellationToken cancelletionToken = default(CancellationToken))
        {
            CreateMetadataHeader(writer);

            String subFolder = this.project.Folder + "\\" + this.SubFolder;

            writer?.WriteLineInfo("Data location:           " + subFolder);
            writer?.WriteLineInfo(" ");

            if (Directory.Exists(subFolder) == false)
            {
                writer?.WriteLineInfo("!!!   Folder does not exist! Data stream is missing!");
                writer?.WriteLineWarning(this.Name + ":Folder does not exist! Data stream is missing!");
                return;
            }

            string[] allFiles = Directory.GetFiles(project.Folder + "\\" + this.SubFolder, "*.*");
            string[] files    = allFiles.Where(s => s.ToUpper().EndsWith(".MOV") || s.ToUpper().EndsWith(".MP4")).ToArray();

            writer?.WriteLineInfo(" Files: ");
            double sumLength = 0;

            DataLines.Clear();
            foreach (String file in files)
            {
                cancelletionToken.ThrowIfCancellationRequested();

                try
                {
                    if (Path.GetExtension(file).ToUpper() == ".MOV")
                    {
                        writer?.WriteWarning("Enviroment cannot handle MOV files!");
                        continue;
                    }

                    writer?.WriteLineInfo("\t" + file);
                    VideoFileReader reader = new VideoFileReader();
                    reader.Open(file);
                    DateTime ft = File.GetLastWriteTime(file);

                    writer?.WriteLineInfo("\t   File modified :  " + ft);
                    DateTime utcf = File.GetLastWriteTimeUtc(file);

                    writer?.WriteLineInfo("\t   File modified :  " + utcf + " UTC");
                    writer?.WriteLineInfo("\t   Frame width   :  " + reader.Width);
                    writer?.WriteLineInfo("\t   Frame height  :  " + reader.Height);
                    writer?.WriteLineInfo("\t   Fps           :  " + reader.FrameRate.ToDouble());
                    writer?.WriteLineInfo("\t   Codec         :  " + reader.CodecName);
                    double length = reader.FrameCount / reader.FrameRate.ToDouble();
                    sumLength += length;
                    TimeSpan t = TimeSpan.FromSeconds(length);
                    writer?.WriteLineInfo("\t   Length        :  " + t.ToString(@"hh\:mm\:ss"));
                    writer?.WriteLineInfo(" ");

                    string        rootFolder = project.Folder + "\\" + this.SubFolder + "\\";
                    String        subFile    = file.Replace(rootFolder, "");
                    VideoDataLine dataLine   = new VideoDataLine(subFile, new DateTime(utcf.Ticks - TimeSpan.FromSeconds(length).Ticks), TimeType.FILE);
                    dataLine.FrameCount = reader.FrameCount;
                    dataLine.FrameRate  = reader.FrameRate.ToDouble();

                    if (this.ShortName.Contains("GPR"))
                    {
                        dataLine.TimeType = TimeType.UNKNOWN;
                    }

                    dataLine.Length = TimeSpan.FromSeconds(length);
                    this.DataLines.Add(dataLine);
                    reader.Close();
                }
                catch (Exception ex)
                {
                    writer.WriteLineError(ex.Message);
                }
            }

            if (DataLines.Count() == 0)
            {
                writer.WriteLineInfo("Empty folder!");
                writer.WriteLineWarning(this.Name + ": Empty folder!");
            }
            this.OrderDataLines();

            int dn = Math.Abs(allFiles.Count() - DataLines.Count());

            if (dn != 0)
            {
                writer.WriteLineInfo("\tNumber of unidentified files in the folder: " + dn);
                writer.WriteLineWarning(this.Name + ": Number of unidentified files in the folder: " + dn);
            }
        }
Пример #11
0
        public override void WriteMetadata(ILogger writer, CancellationToken cancelletionToken = default(CancellationToken))
        {
            CreateMetadataHeader(writer);

            String subFolder = this.project.Folder + "\\" + this.SubFolder;

            writer.WriteLineInfo("Data location:           " + subFolder);
            writer.WriteLineInfo(" ");

            if (Directory.Exists(subFolder) == false)
            {
                writer.WriteLineInfo("!!!   Folder does not exist! Data stream is missing!");
                writer.WriteLineWarning(this.Name + ":Folder does not exist! Data stream is missing!");
                return;
            }

            // IMU CSV logs
            string[] allFiles = Directory.GetFiles(project.Folder + "\\" + this.SubFolder, "*.csv");
            string[] files    = allFiles;

            if (files.Count() > 0)
            {
                DateTime startTime = DateTime.MaxValue;
                DateTime endTime   = DateTime.MinValue;
                foreach (string fpath in files)
                {
                    DateTime startTimef = DateTime.MaxValue;
                    DateTime endTimef   = DateTime.MinValue;
                    using (StreamReader reader = File.OpenText(fpath))
                    {
                        // skip header
                        for (int i = 0; i < 17; i++)
                        {
                            reader.ReadLine();
                        }

                        string line = "";
                        while ((line = reader.ReadLine()) != null)
                        {
                            cancelletionToken.ThrowIfCancellationRequested();

                            string[] linesp = line.Split(',');

                            if (linesp.Count() > 3)
                            {
                                if (linesp[0] == "")
                                {
                                    continue;
                                }
                                int      week = Convert.ToInt32(linesp[1]);
                                double   tow  = Convert.ToDouble(linesp[2]);
                                DateTime dt   = Utils.ConvertFromTOW(week, tow);

                                if (dt < startTime)
                                {
                                    startTime = dt;
                                }
                                if (dt > endTime)
                                {
                                    endTime = dt;
                                }
                                if (dt < startTimef)
                                {
                                    startTimef = dt;
                                }
                                if (dt > endTimef)
                                {
                                    endTimef = dt;
                                }
                            }
                        }
                    }

                    IMUDataLine dataLine = new IMUDataLine(fpath, startTimef, TimeType.GPS);
                    dataLine.Length = new TimeSpan(endTimef.Ticks - startTimef.Ticks);
                    DataLines.Add(dataLine);
                }

                if (this.Length == 0)
                {
                    writer.WriteLineInfo("\tIMU observation is too short!");
                    writer.WriteLineWarning(this.Name + ":IMU observation is too short!");
                }
                writer.WriteLineInfo("\t             First observation : " + this.StartTime);
                writer.WriteLineInfo("\t              Last observation : " + this.EndTime);
                writer.WriteLineInfo("\t             Length of observ. : " + (new TimeSpan(endTime.Ticks - startTime.Ticks)).ToString(@"hh\:mm\:ss"));
                this.OrderDataLines();
            }
            else
            {
                writer.WriteLineInfo("\tNo observation file!");
                writer.WriteLineWarning(this.Name + ":No observation file!");
            }
        }
Пример #12
0
 public virtual void OrderDataLines()
 {
     DataLines.Sort((x, y) => DateTime.Compare(x.TimeStamp, y.TimeStamp));
 }
        public override void WriteMetadata(ILogger writer, CancellationToken cancelletionToken = default(CancellationToken))
        {
            CreateMetadataHeader(writer);

            String subFolder = this.project.Folder + "\\" + this.SubFolder;

            writer.WriteLineInfo("Data location:           " + subFolder);
            writer.WriteLineInfo(" ");

            if (Directory.Exists(subFolder) == false)
            {
                writer.WriteLineInfo("!!!   Folder does not exist! Data stream is missing!");
                writer.WriteLineWarning(this.Name + ":Folder does not exist! Data stream is missing!");
                return;
            }

            string[] files = Directory.GetFiles(project.Folder + "\\" + this.SubFolder, "*.pcap");

            writer.WriteLineInfo(" Files: ");
            foreach (String file in files)
            {
                cancelletionToken.ThrowIfCancellationRequested();
                writer.WriteLineInfo("\t" + file);

                String nmea = null;
                try
                {
                    //nmea = this.ReadFirstNMEA(file);
                }
                catch (Exception ex)
                {
                    writer.WriteLineWarning("Cannot open PCAP file: " + file);
                    writer.WriteLineWarning("Exception: " + ex.ToString());
                    writer.WriteLineWarning("Is the WINPCAP installed? Download from https://www.winpcap.org/install/!");
                    continue;
                }
                //break;

                FileInfo fileInfo = new System.IO.FileInfo(file);
                DateTime ft       = File.GetLastWriteTime(file);

                writer.WriteLineInfo("\t   File modified :  " + ft);
                DateTime uft = File.GetLastWriteTimeUtc(file);
                writer.WriteLineInfo("\t   File modified :  " + uft + " UTC");
                writer.WriteLineInfo("\t            Size :  " + fileInfo.Length / 1e6 + " MB");
                writer.WriteLineInfo("\t      first NMEA :  " + nmea);

                if (nmea != null)
                {
                    String[] tsnmeas   = nmea.Split(',');
                    String   dateStr   = uft.ToString("yyyy-MM-dd ") + tsnmeas[1].Substring(0, 2) + ":" + tsnmeas[1].Substring(2, 2) + ":" + tsnmeas[1].Substring(4, 2);
                    DateTime time_nmea = DateTime.ParseExact(dateStr, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
                    writer.WriteLineInfo("\t       Date time :  " + time_nmea);

                    writer.WriteLineInfo(" ");
                    VelodyneDataLine dataLine = new VelodyneDataLine(Path.GetFileName(file), time_nmea, TimeType.GPS);
                    dataLine.Length = (new TimeSpan(uft.Ticks - time_nmea.Ticks));
                    this.DataLines.Add(dataLine);
                }
                else
                {
                    writer.WriteLineWarning("No NMEA could not be extracted from " + file);
                    VelodyneDataLine dataLine = new VelodyneDataLine(Path.GetFileName(file), uft, TimeType.CPU);
                    dataLine.Length = (new TimeSpan(0));
                    this.DataLines.Add(dataLine);
                }
            }

            this.OrderDataLines();

            if (DataLines.Count() == 0)
            {
                writer.WriteLineInfo("Empty folder!");
                writer.WriteLineWarning(this.Name + ":Empty folder!");
            }

            string[] allFiles = Directory.GetFiles(project.Folder + "\\" + this.SubFolder, "*.*");
            int      dn       = Math.Abs(allFiles.Count() - DataLines.Count());

            if (dn != 0)
            {
                writer.WriteLineInfo("\tNumber of unidentified files in the folder: " + dn);
                writer.WriteLineWarning(this.Name + ":Number of unidentified files in the folder: " + dn);
            }
        }