Example #1
0
 private void ValidateUnique(JArray jArray)
 {
     if (jArray.Distinct(JTokenEqualityComparer.Instance).Count() != jArray.Count)
     {
         AddResult(jArray, ErrorNumber.NotUnique);
     }
 }
        public void ValidateProperty(JObject jObject, ref List <string> Error, JArray jArray, string element = null, string check = null)
        {
            const string         PropInfoBinding     = "propInfoBinding";
            JArray               propInfoBinding     = (JArray)jObject[PropInfoBinding];
            IEnumerable <JToken> UniquePropInfo      = new List <JToken>(propInfoBinding.Distinct());
            IEnumerable <JToken> UniquePropInterface = new List <JToken>(jArray.Distinct());

            if (check == "true")
            {
                foreach (var uniqueProperty in UniquePropInterface)
                {
                    //System.Console.WriteLine(uniqueProperty);
                    int PropertyCount = 0;
                    foreach (var property in jArray)
                    {
                        if (uniqueProperty == (dynamic)property)
                        {
                            PropertyCount++;
                        }
                    }
                    if (PropertyCount > 1)
                    {
                        Error.Add("Property Interface elements are not unique for '" + uniqueProperty + "'");
                    }
                }
            }

            foreach (var uniquePropInfo in UniquePropInfo)
            {
                if (propInfoBinding.Count != 0)
                {
                    int count = 0;
                    foreach (dynamic prop in propInfoBinding)
                    {
                        int flag = 0;
                        if (prop == uniquePropInfo)
                        {
                            count++;
                        }
                        if (count > 1)
                        {
                            Error.Add("propInfoBinding elements are not unique for '" + element + "'");
                        }

                        foreach (var property in UniquePropInterface)
                        {
                            if (prop == property)
                            {
                                flag = 1;
                                break;
                            }
                        }
                        if (flag == 0)
                        {
                            Error.Add("propInfoBinding element " + prop + " for the Elements object '" + element + "' is not present in PropertyInterface");
                        }
                    }
                }
            }
        }
        public void ValidateProperty(JObject jObject, ref List <string> Error, JArray jArray, string element = null, string check = null)
        {
            const string         members             = "members";
            const string         name                = "name";
            JArray               Members             = (JArray)jObject[members];
            IEnumerable <JToken> UniquePropInterface = new List <JToken>(jArray.Distinct());

            foreach (var prop in UniquePropInterface)
            {
                int flag = 0;
                foreach (var member in Members)
                {
                    JObject variables = (JObject)member;
                    if (variables[name] == (dynamic)prop)
                    {
                        flag = 1;
                        break;
                    }
                }
                if (flag == 0)
                {
                    Error.Add("'" + prop + "' is not present in the OS file");
                }
            }
        }
        /// <summary>
        /// Get data graphic activity by week.
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        public void getActivityByWeek(int year, int month)
        {
            //https://www.codeproject.com/Questions/1276907/Get-every-weeks-start-and-end-date-from-series-end
            //usage:
            DateTime StartDate     = new DateTime(year, month, 1, 0, 0, 0);
            DateTime SeriesEndDate = new DateTime(year, month, DateTime.DaysInMonth(year, month), 23, 59, 59);
            //find first monday
            DateTime firstMonday = Enumerable.Range(0, 7)
                                   .SkipWhile(x => StartDate.AddDays(x).DayOfWeek != DayOfWeek.Monday)
                                   .Select(x => StartDate.AddDays(x))
                                   .First();
            //get count of days
            TimeSpan ts = (TimeSpan)(SeriesEndDate - firstMonday);
            //create new list of WeekStartEnd class
            List <WeekStartEnd> datesPeriodes = new List <WeekStartEnd>();

            //add dates to list
            for (int i = 0; i < ts.Days; i += 7)
            {
                datesPeriodes.Add(new WeekStartEnd()
                {
                    Monday = firstMonday.AddDays(i), Sunday = firstMonday.AddDays(i + 6).AddHours(23).AddMinutes(59).AddSeconds(59)
                });
            }

            // Source activty by month
            JObject activityByWeek1 = new JObject();
            JObject activityByWeek2 = new JObject();
            JObject activityByWeek3 = new JObject();
            JObject activityByWeek4 = new JObject();
            JObject activityByWeek5 = new JObject();

            JArray           activityByWeek       = new JArray();
            SeriesCollection activityByWeekSeries = new SeriesCollection();

            if (isMonthSources)
            {
                // Insert sources
                for (int iSource = 0; iSource < listSources.Count; iSource++)
                {
                    activityByWeek1.Add((string)listSources[iSource], 0);
                    activityByWeek2.Add((string)listSources[iSource], 0);
                    activityByWeek3.Add((string)listSources[iSource], 0);
                    activityByWeek4.Add((string)listSources[iSource], 0);
                    activityByWeek5.Add((string)listSources[iSource], 0);
                }

                activityByWeek.Add(activityByWeek1);
                activityByWeek.Add(activityByWeek2);
                activityByWeek.Add(activityByWeek3);
                activityByWeek.Add(activityByWeek4);
                activityByWeek.Add(activityByWeek5);

                List <GameActivityClass> listGameActivities = GameActivityDatabases.GetListGameActivity();
                for (int iGame = 0; iGame < listGameActivities.Count; iGame++)
                {
                    List <Activity> gameActivities = listGameActivities[iGame].Activities;
                    for (int iActivity = 0; iActivity < gameActivities.Count; iActivity++)
                    {
                        long     elapsedSeconds = gameActivities[iActivity].ElapsedSeconds;
                        DateTime dateSession    = Convert.ToDateTime(gameActivities[iActivity].DateSession).AddSeconds(-elapsedSeconds).ToLocalTime();
                        string   sourceName     = gameActivities[iActivity].SourceName;

                        // Cumul data
                        for (int iWeek = 0; iWeek < datesPeriodes.Count; iWeek++)
                        {
                            if (datesPeriodes[iWeek].Monday <= dateSession && dateSession <= datesPeriodes[iWeek].Sunday)
                            {
                                activityByWeek[iWeek][sourceName] = (long)activityByWeek[iWeek][sourceName] + elapsedSeconds;
                            }
                        }
                    }
                }


                // Check source with data (only view this)
                JArray listNoDelete = new JArray();
                for (int i = 0; i < activityByWeek.Count; i++)
                {
                    foreach (var item in (JObject)activityByWeek[i])
                    {
                        if ((long)item.Value != 0 && listNoDelete.TakeWhile(x => x.ToString() == item.Key).Count() != 1)
                        {
                            listNoDelete.Add(item.Key);
                        }
                    }
                }
                listNoDelete = JArray.FromObject(listNoDelete.Distinct().ToArray());


                // Prepare data.
                string[] labels = new string[listNoDelete.Count];
                for (int iSource = 0; iSource < listNoDelete.Count; iSource++)
                {
                    labels[iSource] = (string)listNoDelete[iSource];
                    if (settings.showLauncherIcons)
                    {
                        labels[iSource] = TransformIcon.Get((string)listNoDelete[iSource]);
                    }

                    IChartValues Values = new ChartValues <CustomerForTime>()
                    {
                        new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[0][(string)listNoDelete[iSource]]
                        },
                        new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[1][(string)listNoDelete[iSource]]
                        },
                        new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[2][(string)listNoDelete[iSource]]
                        },
                        new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[3][(string)listNoDelete[iSource]]
                        }
                    };

                    if (datesPeriodes.Count == 5)
                    {
                        Values.Add(new CustomerForTime {
                            Name = (string)listNoDelete[iSource], Values = (int)activityByWeek[4][(string)listNoDelete[iSource]]
                        });
                    }

                    activityByWeekSeries.Add(new StackedColumnSeries
                    {
                        Title      = labels[iSource],
                        Values     = Values,
                        StackMode  = StackMode.Values,
                        DataLabels = false
                    });
                }
            }


            // Set data in graphics.
            string[] activityByWeekLabels = new[]
            {
                resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[0].Monday),
                resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[1].Monday),
                resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[2].Monday),
                resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[3].Monday)
            };
            if (datesPeriodes.Count == 5)
            {
                activityByWeekLabels = new[]
                {
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[0].Monday),
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[1].Monday),
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[2].Monday),
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[3].Monday),
                    resources.GetString("LOCGameActivityWeekLabel") + " " + Tools.WeekOfYearISO8601(datesPeriodes[4].Monday)
                };
            }


            //let create a mapper so LiveCharts know how to plot our CustomerViewModel class
            var customerVmMapper = Mappers.Xy <CustomerForTime>()
                                   .X((value, index) => index)
                                   .Y(value => value.Values);

            //lets save the mapper globally
            Charting.For <CustomerForTime>(customerVmMapper);

            Func <double, string> activityForGameLogFormatter = value => (string)converter.Convert((long)value, null, null, CultureInfo.CurrentCulture);

            acwLabelsY.LabelFormatter = activityForGameLogFormatter;

            acwSeries.Series    = activityByWeekSeries;
            acwLabelsY.MinValue = 0;
            ((CustomerToolTipForMultipleTime)acwSeries.DataTooltip).ShowIcon = settings.showLauncherIcons;
            acwLabelsX.Labels = activityByWeekLabels;
        }