Esempio n. 1
0
        private void Analyse()
        {
            try
            {
                ImportCuesheet = new ImportCuesheet();

                AnalyseException = null;
                var           regicesCuesheet       = AnalyseScheme(TextImportScheme.SchemeCuesheet);
                var           regicesTracks         = AnalyseScheme(TextImportScheme.SchemeTracks);
                Boolean       cuesheetRecognized    = false;
                List <String> recognizedFileContent = new List <string>();
                foreach (var line in FileContent)
                {
                    if (String.IsNullOrEmpty(line) == false)
                    {
                        Boolean recognized = false;
                        if ((recognized == false) && (cuesheetRecognized == false) && (regicesCuesheet.Count > 0))
                        {
                            var firstRegiceCuesheet = regicesCuesheet.First();
                            if (firstRegiceCuesheet.Value.IsMatch(line))
                            {
                                recognized         = true;
                                cuesheetRecognized = true;
                                recognizedFileContent.Add(AnalyseLine(line, ImportCuesheet, regicesCuesheet));
                            }
                        }
                        if ((recognized == false) && (regicesTracks.Count > 0))
                        {
                            var firstRegiceTrack = regicesTracks.First();
                            if (firstRegiceTrack.Value.IsMatch(line))
                            {
                                recognized = true;
                                var track = new ImportTrack();
                                recognizedFileContent.Add(AnalyseLine(line, track, regicesTracks));
                                ImportCuesheet.AddTrack(track);
                            }
                        }
                    }
                }
                if (recognizedFileContent.Count > 0)
                {
                    FileContentRecognized = recognizedFileContent.AsReadOnly();
                }
            }
            catch (Exception ex)
            {
                AnalyseException = ex;
                ImportCuesheet   = null;
            }
        }
        private void Analyse()
        {
            try
            {
                AnalyseException = null;
                tracks.Clear();
                var regices = AnalyseScheme();
                foreach (var line in fileLines)
                {
                    if (String.IsNullOrEmpty(line) == false)
                    {
                        var track = new ImportTrack();
                        var index = 0;
                        foreach (var regexRelation in regices)
                        {
                            var match = regexRelation.Value.Match(line);
                            if (match.Success == true)
                            {
                                var propertyValueBefore = line.Substring(index, match.Index - index);
                                var propertyBefore      = track.GetType().GetProperty(regexRelation.Key.Item1, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                                var propertyValueAfter  = line.Substring(match.Index + match.Length);
                                var propertyAfter       = track.GetType().GetProperty(regexRelation.Key.Item2, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                                //Check if other regices might match the value after
                                Boolean otherMatchRegEx = false;
                                var     elementIndex    = regices.ToList().IndexOf(regexRelation);
                                for (int i = elementIndex; i < regices.Count; i++)
                                {
                                    var nextRegExRelation = regices.ElementAt(i);
                                    if (nextRegExRelation.Value.IsMatch(propertyValueAfter) == true)
                                    {
                                        otherMatchRegEx = true;
                                        i = regices.Count;
                                    }
                                }

                                if (propertyBefore.PropertyType == typeof(TimeSpan?))
                                {
                                    //TODO: Format
                                    propertyBefore.SetValue(track, TimeSpan.Parse(propertyValueBefore));
                                }
                                if (propertyBefore.PropertyType == typeof(uint?))
                                {
                                    propertyBefore.SetValue(track, Convert.ToUInt32(propertyValueBefore));
                                }
                                if (propertyBefore.PropertyType == typeof(String))
                                {
                                    propertyBefore.SetValue(track, propertyValueBefore);
                                }
                                if (otherMatchRegEx == false)
                                {
                                    if (propertyAfter.PropertyType == typeof(TimeSpan?))
                                    {
                                        //TODO: Format
                                        propertyAfter.SetValue(track, TimeSpan.Parse(propertyValueAfter));
                                    }
                                    if (propertyAfter.PropertyType == typeof(uint?))
                                    {
                                        propertyAfter.SetValue(track, Convert.ToUInt32(propertyValueAfter));
                                    }
                                    if (propertyAfter.PropertyType == typeof(String))
                                    {
                                        propertyAfter.SetValue(track, propertyValueAfter);
                                    }
                                }
                                index = match.Index + match.Length;
                            }
                        }
                        tracks.Add(track);
                    }
                }
            }
            catch (Exception ex)
            {
                AnalyseException = ex;
            }
        }