public async Task <DemoBasicData> AddDemoBasicDataAsync(Demo demo) { string filePath = GetDemoBasicFilePath(); List <DemoBasicData> data = await GetDemoBasicDataAsync(); DemoBasicData demoData = new DemoBasicData { Id = demo.Id, Date = demo.Date, SteamIdList = demo.Players.Select(player => player.SteamId).ToList(), Path = demo.Path }; if (data.Contains(demoData)) { data.Remove(demoData); } data.Add(demoData); string json = await Task.Factory.StartNew(() => JsonConvert.SerializeObject(data)); File.WriteAllText(filePath, json); return(demoData); }
public async Task <List <Demo> > GetDemosHeader(List <string> folders, List <Demo> currentDemos = null, int demoSize = 0) { // Demos list returned List <Demo> demos = new List <Demo>(); // Contains all demos header data List <Demo> demoHeaderList = new List <Demo>(); if (folders.Count > 0) { // retrieve basic demos data List <DemoBasicData> demoBasicDataList = await _cacheService.GetDemoBasicDataAsync(); // contains possible DemoBasicData that will be keeped List <DemoBasicData> tempDemoBasicDataList = new List <DemoBasicData>(); foreach (string folder in folders) { if (Directory.Exists(folder)) { string[] files = Directory.GetFiles(folder, "*.dem"); foreach (string file in files) { if (file.Contains("myassignedcase")) { continue; } Demo demo = await GetDemoHeaderAsync(file); if (demo != null) { // Skip if the demo is already in the current demos list if ((currentDemos != null && currentDemos.Contains(demo)) || demoHeaderList.Contains(demo)) { continue; } demoHeaderList.Add(demo); } } } } // Process each demo header foreach (Demo demo in demoHeaderList) { // retrieve basic demo data DemoBasicData demoData = demoBasicDataList.FirstOrDefault(d => d.Id == demo.Id); if (demoData == null) { // if basic data are not found, add it to cache demoData = await _cacheService.AddDemoBasicDataAsync(demo); } // Skip if the player isn't in the demo if (ShowOnlyAccountDemos && SelectedStatsAccountSteamId != 0 && !demoData.SteamIdList.Contains(SelectedStatsAccountSteamId)) { continue; } // store basic data to filter on date quickly tempDemoBasicDataList.Add(demoData); } tempDemoBasicDataList.Sort((d1, d2) => d2.Date.CompareTo(d1.Date)); if (demoSize > 0) { tempDemoBasicDataList = tempDemoBasicDataList.Take(demoSize).ToList(); } foreach (DemoBasicData basicData in tempDemoBasicDataList) { Demo demo; bool hasDemoInCache = _cacheService.HasDemoInCache(basicData.Id); if (hasDemoInCache) { demo = await GetDemoDataByIdAsync(basicData.Id); } else { demo = demoHeaderList.First(d => d.Id == basicData.Id); } if (currentDemos == null || !currentDemos.Contains(demo)) { demos.Add(demo); } } } return(demos); }