Example #1
0
 void RefreshCategoryAutoCompleteList()
 {
     Task.Factory.StartNew(() =>
     {
         try
         {
             string[] categoryNames = new[] { "Any%", "Low%", "100%" };
             try
             {
                 var game = Run.Metadata.Game;
                 if (game != null)
                     categoryNames = game.FullGameCategories.Select(x => x.Name).ToArray();
             }
             catch (Exception ex)
             {
                 Log.Error(ex);
             }
             this.InvokeIfRequired(() =>
             {
                 try
                 {
                     cbxRunCategory.Items.Clear();
                     cbxRunCategory.Items.AddRange(categoryNames);
                 }
                 catch (Exception ex)
                 {
                     Log.Error(ex);
                 }
             });
         }
         catch (Exception ex)
         {
             Log.Error(ex);
         }
     });
 }
        private void btnSearch_Click(object sender, EventArgs e)
        {
            splitsTreeView.Nodes.Clear();
            try
            {
                var fuzzyGameName = txtSearch.Text;
                if (!string.IsNullOrEmpty(fuzzyGameName))
                {
                    try
                    {
                        string actualGameName;
                        var leaderboards = SpeedrunCom.Instance.GetLeaderboards(fuzzyGameName, out actualGameName);
                        var gameId = SpeedrunCom.Instance.GetGameID(actualGameName);
                        var games = new[] { leaderboards };
                        foreach (var game in games)
                        {
                            var gameNode = new TreeNode(actualGameName);
                            gameNode.Tag = SpeedrunCom.Instance.GetGameUri(gameId);
                            var categories = game;
                            foreach (var category in categories)
                            {
                                var categoryNode = new TreeNode(category.Key);
                                categoryNode.Tag = SpeedrunCom.Instance.GetGameUri(gameId);
                                var records = category.Value;
                                var timingMethod = SpeedrunCom.Instance.GetLeaderboardTimingMethod(records);

                                foreach (var record in records)
                                {
                                    var place = record.Place.HasValue
                                        ? (record.Place.Value.ToString(CultureInfo.InvariantCulture).PadLeft(getDigits(records.Count())) + ".   ")
                                        : "";
                                    var runners = record.Runners.Aggregate((a, b) => a + " & " + b);
                                    var runText = place + (record.Time[timingMethod].HasValue ? new ShortTimeFormatter().Format(record.Time[timingMethod]) : "") + " by " + runners;
                                    var runNode = new TreeNode(runText);
                                    runNode.Tag = new TaggedRecord(gameId, record);
                                    if (!record.RunAvailable)
                                        runNode.ForeColor = Color.Gray;
                                    categoryNode.Nodes.Add(runNode);
                                }
                                gameNode.Nodes.Add(categoryNode);
                            }
                            splitsTreeView.Nodes.Add(gameNode);
                        }
                    }
                    catch { }

                    try
                    {
                        var userName = txtSearch.Text.TrimStart('@');
                        var games = SpeedrunCom.Instance.GetPersonalBestList(userName);
                        IEnumerable<string> possibleUsernames = null;
                        var userNode = new TreeNode();
                        foreach (var game in games)
                        {
                            var gameNode = new TreeNode(game.Key);
                            var gameId = SpeedrunCom.Instance.GetGameID(game.Key);
                            gameNode.Tag = SpeedrunCom.Instance.GetGameUri(gameId);

                            foreach (var category in game.Value)
                            {
                                var categoryName = category.Key;
                                var record = category.Value;
                                if (possibleUsernames == null)
                                {
                                    possibleUsernames = record.Runners;
                                }
                                else
                                {
                                    possibleUsernames = possibleUsernames.Intersect(record.Runners);
                                }

                                var place = formatPlace(record.Place);
                                var coopRunners = record.Runners.Count() > 1 ? " by " + record.Runners.Aggregate((a, b) => a + " & " + b) : "";
                                var runText = formatTime(record.Time) + " in " + categoryName + coopRunners + place;

                                var runNode = new TreeNode(runText);
                                runNode.Tag = new TaggedRecord(gameId, record);
                                if (!record.RunAvailable)
                                    runNode.ForeColor = Color.Gray;
                                gameNode.Nodes.Add(runNode);
                            }
                            userNode.Nodes.Add(gameNode);
                        }
                        if (possibleUsernames != null && possibleUsernames.Any() && !possibleUsernames.Skip(1).Any())
                        {
                            userName = possibleUsernames.First();
                        }
                        userNode.Tag = SpeedrunCom.Instance.GetUserUri(userName);
                        userNode.Text = "@" + userName;
                        splitsTreeView.Nodes.Add(userNode);
                    }
                    catch { }
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex);
                MessageBox.Show(this, "Search Failed!", "Search Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }