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; } }