Beispiel #1
0
        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());
        }
Beispiel #2
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);
        }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        // 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);
        }
Beispiel #8
0
        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++;
            }
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
            }
        }
Beispiel #11
0
        // 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);
        }
Beispiel #12
0
        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;
                    }
                }
            }
        }