public IList <Command> Encode(ChartSet chartSet) { var chartList = chartSet.Charts.AsList(); var chartMetadata = chartSet.Metadata ?? new Metadata(); var metaCommands = TagsToEncode .Select(s => new Command { Name = s, Values = chartMetadata[s] != null ? new[] { chartMetadata[s] } : GetDefault(s, chartSet) }); var timingCommands = GetTimingCommands(chartList); var noteCommands = chartList.Select(chart => new Command { Name = ChartTag.NotesTag, Values = new[] { chart[NotesCommandTag.TypeTag] ?? string.Empty, chart[NotesCommandTag.DescriptionTag] ?? string.Empty, chart[NotesCommandTag.DifficultyTag] ?? string.Empty, $"{(chart[NumericData.PlayLevel] ?? BigRational.One).GetWholePart()}", _grooveRadarEncoder.Encode(chart), _noteCommandStringEncoder.Encode(_noteEncoder.Encode(chart.Events)) } }); return(metaCommands .Concat(timingCommands) .Concat(noteCommands) .ToList()); }
public static ChartSet PopulateChartSet(Set set, IEnumerable <int> monthsInSetsData, IEnumerable <int> weeksInSetsData, DateTime startDate, DateTime endDate) { ChartSet chartSet = new ChartSet(); chartSet.Name = set.Name; chartSet.Id = set.Id; //####################################################################### // Start Building the set month statistics (NOTICE: that the calculation is intended to calculate by aggregating all activities by month regardless of the year the month belongs to) //####################################################################### chartSet.ChartSetMonthsData = new List <ChartSetMonthData>(); foreach (var month in monthsInSetsData) { chartSet.ChartSetMonthsData.Add(new ChartSetMonthData { ActivityCount = set.Exercises.Where(o => o.ExerciseRecords.Any(m => m.Date.Month == month)).Count(), StartDate = DateTime.Now.StartOfMonth(month), EndDate = DateTime.Now.EndOfMonth(month), MonthNumber = month }); } //chartSet.ChartSetMonthsData.OrderBy(o => o.MonthNumber); //####################################################################### //####################################################################### // Start Building the set weeks statistics (NOTICE: that the calculation is intended to calculate by aggregating all activities by week regardless of the year the week belongs to) //####################################################################### chartSet.ChartSetWeeksData = new List <ChartSetWeekData>(); foreach (var week in weeksInSetsData) { //var er = set.Exercises.Select(o => o.ExerciseRecords.Where(m => m.Date.WeekOfDate() == week && m.Date >= startDate && m.Date <= endDate)).ElementAtOrDefault(0); var er = set.Exercises.Select(o => o.ExerciseRecords.FirstOrDefault(m => m.Date.WeekOfDate() == week)).ElementAtOrDefault(0); chartSet.ChartSetWeeksData.Add(new ChartSetWeekData { ActivityCount = set.Exercises.Where(o => o.ExerciseRecords.Any(m => m.Date.WeekOfDate() == week)).Count(), StartDate = DateTimeExtensions.StartOfWeekNumber(er != null ? er.Date.Year : DateTime.Now.Year, week), EndDate = DateTimeExtensions.EndOfWeekNumber(er != null ? er.Date.Year : DateTime.Now.Year, week), WeekNumber = week }); } //chartSet.ChartSetWeeksData.OrderBy(o => o.WeekNumber); chartSet.TotalActivityCount = chartSet.ChartSetMonthsData.Sum(ac => ac.ActivityCount); //####################################################################### //####################################################################### // Start creating chart data for excercises //####################################################################### chartSet.ChartSetExercises = new List <ChartExercise>(); foreach (var exercise in set.Exercises) { ChartExercise chartExercise = ChartsHelper.PopulateChartExercise(exercise, monthsInSetsData, weeksInSetsData, startDate, endDate); // Final step is to add the loaded exercise data into the corresponding set that is to be returned to the client chartSet.ChartSetExercises.Add(chartExercise); } //####################################################################### // Final step is to add the loaded set data that is to be returned to the client return(chartSet); }
private string[] GetDefault(string name, ChartSet chartSet) { switch (name) { case ChartTag.DisplayBpmTag: { var bpms = GetBpmEvents(chartSet.Charts) .Select(e => (double)e.Value) .Where(e => !double.IsInfinity(e)) .Select(e => Math.Round(e)) .AsList(); IList <double> validBpms = bpms.Where(e => e > 0 && e < 1000).ToList(); if (!validBpms.Any()) { validBpms = bpms; } var min = Math.Round((decimal)bpms.Min()); var max = Math.Round((decimal)bpms.Max()); return((min == max) ? new[] { $"{min}" } : new[] { $"{min}:{max}" }); } } return(new string[0]); }
public static ChartSet PopulateChartSet(Set set, IEnumerable<int> monthsInSetsData, IEnumerable<int> weeksInSetsData, DateTime startDate, DateTime endDate) { ChartSet chartSet = new ChartSet(); chartSet.Name = set.Name; chartSet.Id = set.Id; //####################################################################### // Start Building the set month statistics (NOTICE: that the calculation is intended to calculate by aggregating all activities by month regardless of the year the month belongs to) //####################################################################### chartSet.ChartSetMonthsData = new List<ChartSetMonthData>(); foreach (var month in monthsInSetsData) { chartSet.ChartSetMonthsData.Add(new ChartSetMonthData { ActivityCount = set.Exercises.Where(o => o.ExerciseRecords.Any(m => m.Date.Month == month)).Count(), StartDate = DateTime.Now.StartOfMonth(month), EndDate = DateTime.Now.EndOfMonth(month), MonthNumber = month }); } //chartSet.ChartSetMonthsData.OrderBy(o => o.MonthNumber); //####################################################################### //####################################################################### // Start Building the set weeks statistics (NOTICE: that the calculation is intended to calculate by aggregating all activities by week regardless of the year the week belongs to) //####################################################################### chartSet.ChartSetWeeksData = new List<ChartSetWeekData>(); foreach (var week in weeksInSetsData) { //var er = set.Exercises.Select(o => o.ExerciseRecords.Where(m => m.Date.WeekOfDate() == week && m.Date >= startDate && m.Date <= endDate)).ElementAtOrDefault(0); var er = set.Exercises.Select(o => o.ExerciseRecords.FirstOrDefault( m => m.Date.WeekOfDate() == week)).ElementAtOrDefault(0); chartSet.ChartSetWeeksData.Add(new ChartSetWeekData { ActivityCount = set.Exercises.Where(o => o.ExerciseRecords.Any(m => m.Date.WeekOfDate() == week)).Count(), StartDate = DateTimeExtensions.StartOfWeekNumber(er != null ? er.Date.Year : DateTime.Now.Year, week), EndDate = DateTimeExtensions.EndOfWeekNumber(er != null ? er.Date.Year : DateTime.Now.Year, week), WeekNumber = week }); } //chartSet.ChartSetWeeksData.OrderBy(o => o.WeekNumber); chartSet.TotalActivityCount = chartSet.ChartSetMonthsData.Sum(ac => ac.ActivityCount); //####################################################################### //####################################################################### // Start creating chart data for excercises //####################################################################### chartSet.ChartSetExercises = new List<ChartExercise>(); foreach (var exercise in set.Exercises) { ChartExercise chartExercise = ChartsHelper.PopulateChartExercise(exercise, monthsInSetsData, weeksInSetsData, startDate, endDate); // Final step is to add the loaded exercise data into the corresponding set that is to be returned to the client chartSet.ChartSetExercises.Add(chartExercise); } //####################################################################### // Final step is to add the loaded set data that is to be returned to the client return (chartSet); }
private void chartSetsComboBox_Leave(object sender, EventArgs e) { if (selectedChars.Items.Count == 0) { return; } var setName = chartSetsComboBox.Text; if (String.IsNullOrWhiteSpace(setName)) { return; } if (dataKeeper.chartSets.Any(item => item.Name == setName)) { return; } var set = new ChartSet { Name = setName }; foreach (string item in selectedChars.Items) { var itemInfo = item; set.Items.Add(dataKeeper.valueInfos.First(info => info.Title == itemInfo)); } dataKeeper.chartSets.Add(set); chartSetsComboBox.Items.Add(set.Name); }
private ChartSet GetCurrentSet() { if (selectedChars.Items.Count == 0) { return(null); } var setName = chartSetsComboBox.Text; if (String.IsNullOrWhiteSpace(setName)) { return(null); } var chartSet = dataKeeper.chartSets.FirstOrDefault(item => item.Name == setName); if (chartSet == null) { chartSet = new ChartSet { Name = setName }; dataKeeper.chartSets.Add(chartSet); chartSetsComboBox.Items.Add(chartSet.Name); } return(chartSet); }
// GET: api/ChartSet/5 public ChartDataContainer Get(long id, DateTime startDate, DateTime endDate) { ChartDataContainer chartDataContainer = new ChartDataContainer(); chartDataContainer.ChartSets = new List <ChartSet>(); ChartSet chartSet = null; ExerciseRecordsController exerciseRecordsController = new ExerciseRecordsController(); var exerciseRecordsData = exerciseRecordsController.GetExerciseRecords().Where(er => er.Date >= startDate && er.Date <= endDate && er.Exercise.Set.UserId.ToLower().CompareTo(this.user.Id.ToLower()) == 0 && er.Exercise.SetId == id); var setsData = exerciseRecordsData.DistinctBy(o => o.Exercise.SetId).Select(o => o.Exercise.Set); // We do these steps to narrow down the calculations to actual existing data based on submitted dates var monthsInSetsData = exerciseRecordsData.DistinctBy(o => o.Exercise.SetId).DistinctBy(m => m.Date.Month).Select(ms => ms.Date.Month); var weeksInSetsData = exerciseRecordsData.DistinctBy(o => o.Exercise.SetId).DistinctBy(m => m.Date.WeekOfDate()).Select(ms => ms.Date.WeekOfDate()); //####################################################################### // Start Building the chart data by going through each found set //####################################################################### foreach (var set in setsData) { chartSet = ChartsHelper.PopulateChartSet(set, monthsInSetsData, weeksInSetsData, startDate, endDate); } chartDataContainer.ChartSets.Add(chartSet); //####################################################################### return(chartDataContainer); }
public void Test_Export_SM() { using var mdSource = new FileStream(ExecutablePath, FileMode.Open, FileAccess.Read); var metadataDecoder = Resolve <IDdrPs2MetadataTableStreamReader>(); var dbDecoder = Resolve <IDdrPs2DatabaseDecoder>(); var rawMetaDatas = metadataDecoder.Get(mdSource, mdSource.Length).Select(dbDecoder.Decode).ToList(); var metadataDb = Resolve <IDdrMetadataDatabase>(); using var source = new FileStream(StepDataPath, FileMode.Open, FileAccess.Read); var streamer = Resolve <IDdrPs2FileDataStepStreamReader>(); var output = streamer.Read(source, source.Length); var tableDecoder = Resolve <IDdrPs2FileDataUnboundTableDecoder>(); var table = tableDecoder.Decode(output); var metadataDecorator = Resolve <IDdrMetadataDecorator>(); var ssqReader = Resolve <ISsqStreamReader>(); var ssqDecoder = Resolve <ISsqDecoder>(); var chartSets = table.Select((e, i) => { var charts = ssqDecoder.Decode(ssqReader.Read(new MemoryStream(e.Data))); var idMd = rawMetaDatas.FirstOrDefault(md => md.InternalId == i + 1); var newMd = new Metadata(); var chartSet = new ChartSet { Charts = charts, Metadata = newMd }; metadataDecorator.Decorate(chartSet, idMd, new MetadataDecoratorFileExtensions()); var fullMd = idMd != null ? metadataDb.GetByCode(idMd.Id) : null; newMd[StringData.Comment] = idMd?.Id; newMd[ChartTag.TitleTag] = fullMd?.Title ?? fullMd?.TitleRoman ?? fullMd?.TitleLocal ?? newMd[ChartTag.TitleTag]; newMd[ChartTag.SubTitleTag] = fullMd?.Subtitle ?? fullMd?.SubtitleRoman ?? fullMd?.SubtitleLocal ?? newMd[ChartTag.SubTitleTag]; newMd[ChartTag.ArtistTag] = fullMd?.Artist ?? fullMd?.ArtistRoman ?? fullMd?.ArtistLocal ?? newMd[ChartTag.ArtistTag]; newMd[ChartTag.TitleTranslitTag] = fullMd?.TitleRoman ?? fullMd?.TitleLocal ?? newMd[ChartTag.TitleTranslitTag]; newMd[ChartTag.SubTitleTranslitTag] = fullMd?.SubtitleRoman ?? fullMd?.SubtitleLocal ?? newMd[ChartTag.SubTitleTranslitTag]; newMd[ChartTag.ArtistTranslitTag] = fullMd?.ArtistRoman ?? fullMd?.ArtistLocal ?? newMd[ChartTag.ArtistTranslitTag]; return(chartSet); }).ToList(); var smEncoder = Resolve <ISmEncoder>(); var smWriter = Resolve <ISmStreamWriter>(); var index = 0; foreach (var cs in chartSets) { var commands = smEncoder.Encode(cs); using var stream = this.OpenWrite(Path.Combine(OutPath, cs.Metadata[StringData.Comment] ?? $"{index:D4}", $"{index:D4}.sm")); smWriter.Write(stream, commands); stream.Flush(); index++; } }
public void CanAddElement() { var chart = new Chart(); var ds = new ChartDataset(); var tt = new ChartSet(); var tl = new ChartTrendLine(); var tl2 = new ChartTrendLine(); var tls = new ChartTrendLines(); tl2.SetParentElement(tls); tt.SetParentElement(ds); chart.Add(ds).Add(tt).Add(tl).Add(tl2); Assert.AreEqual(1, chart.Datasets.Children.Count); Assert.AreEqual(1, chart.Datasets.Children.First().Children.Count); Assert.AreEqual(1, chart.TrendLines.Children.Count); }
public void LoadSettings(LocalSettingsKeeper settingsKeeper) { var chartSetsCount = settingsKeeper.GetValue("ChartSetsCount", 0); for (int i = 0; i < chartSetsCount; i++) { var name = settingsKeeper.GetValue("ChartSet" + i, String.Empty); var value = settingsKeeper.GetValue("ChartSetValue" + i, String.Empty); var chartSet = new ChartSet { Name = name }; chartSet.Items.AddRange( value.Split(';').Select(item => valueInfos.FirstOrDefault(info => info.Name == item)).Where( v => v != null)); chartSets.Add(chartSet); } }
// GET: api/ChartSet public ChartDataContainer Get(DateTime startDate, DateTime endDate) { ChartDataContainer chartDataContainer = new ChartDataContainer(); chartDataContainer.ChartSets = new List <ChartSet>(); ExerciseRecordsController exerciseRecordsController = new ExerciseRecordsController(); var exerciseRecordsData = exerciseRecordsController.GetExerciseRecords().Where(er => er.Date >= startDate && er.Date <= endDate); var setsData = exerciseRecordsData.DistinctBy(o => o.Exercise.SetId).Select(o => o.Exercise.Set); // We do these steps to narrow down the calculations to actual existing data based on submitted dates var monthsInSetsData = exerciseRecordsData.DistinctBy(m => m.Date.Month).Select(ms => ms.Date.Month).OrderBy(o => o); var weeksInSetsData = exerciseRecordsData.DistinctBy(m => m.Date.WeekOfDate()).Select(ms => ms.Date.WeekOfDate()).OrderBy(o => o); chartDataContainer.MonthsInSets = new Dictionary <int, String>(); foreach (var month in monthsInSetsData) { chartDataContainer.MonthsInSets.Add(month, new DateTime(DateTime.Now.Year, month, 1).ToString("MMMM", CultureInfo.InvariantCulture)); } chartDataContainer.WeeksInSets = new Dictionary <int, String>(); foreach (var week in weeksInSetsData) { chartDataContainer.WeeksInSets.Add(week, week.ToString()); } //####################################################################### // Start Building the chart data by going through each found set //####################################################################### foreach (var set in setsData) { ChartSet chartSet = ChartsHelper.PopulateChartSet(set, monthsInSetsData, weeksInSetsData, startDate, endDate); // Final step is to add the loaded set data that is to be returned to the client chartDataContainer.ChartSets.Add(chartSet); } //####################################################################### return(chartDataContainer); }
public void Decorate(ChartSet chartSet, DdrDatabaseEntry meta, MetadataDecoratorFileExtensions extensions) { if (meta == null || chartSet == null) { return; } if (chartSet.Metadata == null) { chartSet.Metadata = new Metadata(); } chartSet.Metadata[ChartTag.TitleTag] = meta.LongName ?? meta.ShortName ?? meta.Id; chartSet.Metadata[ChartTag.MusicTag] = $"{meta.Id}.{extensions.Audio}"; chartSet.Metadata[ChartTag.OffsetTag] = $"{(decimal) -chartSet.Charts.First()[NumericData.LinearOffset]}"; chartSet.Metadata[ChartTag.DisplayBpmTag] = $"{meta.MinBpm}:{meta.MaxBpm}"; chartSet.Metadata[ChartTag.BannerTag] = $"{meta.Id}_th.{extensions.Graphics}"; chartSet.Metadata[ChartTag.BackgroundTag] = $"{meta.Id}_bk.{extensions.Graphics}"; foreach (var chart in chartSet.Charts.Where(c => c[NumericData.Id] != null)) { var id = (int)chart[NumericData.Id].Value; if (meta.Difficulties == null || meta.Difficulties.Length == 0) { continue; } if (meta.Difficulties.Length < 8) { switch (id) { case 0x0113: case 0x0114: case 0x0116: chart[NumericData.PlayLevel] = meta.Difficulties[0x0]; break; case 0x0213: case 0x0214: case 0x0216: chart[NumericData.PlayLevel] = meta.Difficulties[0x1]; break; case 0x0313: case 0x0314: case 0x0316: chart[NumericData.PlayLevel] = meta.Difficulties[0x2]; break; case 0x0413: case 0x0414: case 0x0416: chart[NumericData.PlayLevel] = meta.Difficulties[0x4]; break; case 0x0613: case 0x0614: case 0x0616: chart[NumericData.PlayLevel] = meta.Difficulties[0x3]; break; case 0x0118: chart[NumericData.PlayLevel] = meta.Difficulties[0x0]; break; case 0x0218: chart[NumericData.PlayLevel] = meta.Difficulties[0x1]; break; case 0x0318: chart[NumericData.PlayLevel] = meta.Difficulties[0x2]; break; case 0x0418: chart[NumericData.PlayLevel] = meta.Difficulties[0x4]; break; case 0x0618: chart[NumericData.PlayLevel] = meta.Difficulties[0x3]; break; } } else { switch (id) { case 0x0113: case 0x0114: case 0x0116: chart[NumericData.PlayLevel] = meta.Difficulties[0x0]; break; case 0x0213: case 0x0214: case 0x0216: chart[NumericData.PlayLevel] = meta.Difficulties[0x1]; break; case 0x0313: case 0x0314: case 0x0316: chart[NumericData.PlayLevel] = meta.Difficulties[0x2]; break; case 0x0413: case 0x0414: case 0x0416: chart[NumericData.PlayLevel] = meta.Difficulties[0x4]; break; case 0x0613: case 0x0614: case 0x0616: chart[NumericData.PlayLevel] = meta.Difficulties[0x3]; break; case 0x0118: chart[NumericData.PlayLevel] = meta.Difficulties[0x8]; break; case 0x0218: chart[NumericData.PlayLevel] = meta.Difficulties[0x9]; break; case 0x0318: chart[NumericData.PlayLevel] = meta.Difficulties[0xA]; break; case 0x0418: chart[NumericData.PlayLevel] = meta.Difficulties[0xC]; break; case 0x0618: chart[NumericData.PlayLevel] = meta.Difficulties[0xB]; break; } } } }