Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }