public static SplitFile ImportFromWsplit(string path) { var firstLine = File.ReadLines(path).First(); if (!firstLine.Contains("Title=")) throw new Exception("Cannot find Title."); var linesOfText = File.ReadAllLines(path); var runName = firstLine.Replace("Title=", string.Empty); //var heightWidth = linesOfText[3].Replace("Size=", string.Empty).Split(','); //var height = double.Parse(heightWidth[0]); //var width = double.Parse(heightWidth[1]); var decodedStrings = linesOfText.Skip(4).Take(linesOfText.Length - 5).Select(s => { var commaSplit = s.Split(','); return new { Name = commaSplit[0], PbTime = TimeSpan.FromSeconds(double.Parse(commaSplit[2], System.Globalization.CultureInfo.InvariantCulture)), Gold = TimeSpan.FromSeconds(double.Parse(commaSplit[3], System.Globalization.CultureInfo.InvariantCulture)) }; }).ToArray(); var splits = Enumerable.Range(0, decodedStrings.Length).Select(i => { var split = decodedStrings[i]; SplitTimeSpan pbSplit; if (split.PbTime == TimeSpan.Zero) pbSplit = new SplitTimeSpan(TimeSpan.Zero, false); else if (i == 0) pbSplit = new SplitTimeSpan(split.PbTime); else { var lastGoodTime = decodedStrings.Take(i).Where(a => a.PbTime != TimeSpan.Zero).Select(a => a.PbTime).LastOrDefault(); pbSplit = new SplitTimeSpan(split.PbTime.Subtract(lastGoodTime)); } return new SplitInfo() { Name = split.Name, PersonalBestSplit = pbSplit, SumOfBestSplit = split.Gold == TimeSpan.Zero ? SplitTimeSpan.Unknown : new SplitTimeSpan(split.Gold) }; }).ToArray(); var result = new SplitFile(runName, splits); //result.DisplaySettings.WindowHeight = height; //result.DisplaySettings.WindowWidth = width; return result; }
public void CreateNewFile() { var emptySplit = new SplitInfo() { Name = "Unnamed Split", PersonalBestSplit = SplitTimeSpan.Unknown, SumOfBestSplit = SplitTimeSpan.Unknown }; CurrentFile = new SplitFile("Unnamed Run", Enumerable.Repeat(emptySplit, 1).ToArray()); }
public void LoadFromFile(SplitFile file) { var pbAndGold = file.RunDefinition.Zip(file.PersonalBest.Splits, (d, pb) => new { D = d, Pb = pb }) .Zip(file.SumOfBest.Splits, (a, gs) => new { Definition = a.D, PersonalBest = a.Pb, Gold = gs }).ToArray(); Splits = new ObservableCollection<SplitRowEdit>(pbAndGold.Select(a => { var editRow = new SplitRowEdit(this); editRow.GoldSplitLength = a.Definition.SumOfBestSplit.Time; editRow.IsGoldTimeUnknown = !a.Definition.SumOfBestSplit.IsPrecise; editRow.PersonalBestTimeAtSplit = a.PersonalBest.TimeFromRunStart; editRow.IsPbTimeUnknown = !a.PersonalBest.IsPrecise; editRow.Name = a.Definition.Name; return editRow; })); RunTitle = file.Header; PersonalBestDate = file.PersonalBestDate; }