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