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