示例#1
0
        protected override void LoadComplete()
        {
            base.LoadComplete();

            SelectedItem.BindValueChanged(selected =>
            {
                bool isCurrent = selected.NewValue == Model;

                if (!valid.Value)
                {
                    // Don't allow selection when not valid.
                    if (isCurrent)
                    {
                        SelectedItem.Value = selected.OldValue;
                    }

                    // Don't update border when not valid (the border is displaying this fact).
                    return;
                }

                maskingContainer.BorderThickness = isCurrent ? 5 : 0;
            }, true);

            beatmap.BindValueChanged(_ => Scheduler.AddOnce(refresh));
            ruleset.BindValueChanged(_ => Scheduler.AddOnce(refresh));
            valid.BindValueChanged(_ => Scheduler.AddOnce(refresh));
            requiredMods.CollectionChanged += (_, __) => Scheduler.AddOnce(refresh);

            onScreenLoader.DelayedLoadStarted += _ =>
            {
                Task.Run(async() =>
                {
                    try
                    {
                        if (showItemOwner)
                        {
                            var foundUser = await userLookupCache.GetUserAsync(Item.OwnerID).ConfigureAwait(false);
                            Schedule(() => ownerAvatar.User = foundUser);
                        }

                        if (Item.Beatmap.Value == null)
                        {
                            var foundBeatmap = await beatmapLookupCache.GetBeatmapAsync(Item.BeatmapID).ConfigureAwait(false);
                            Schedule(() => Item.Beatmap.Value = foundBeatmap);
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Log($"Error while populating playlist item {e}");
                    }
                });
            };

            refresh();
        }
示例#2
0
        protected override void LoadComplete()
        {
            base.LoadComplete();

            SelectedItem.BindValueChanged(selected =>
            {
                bool isCurrent = selected.NewValue == Model;

                if (!valid.Value)
                {
                    // Don't allow selection when not valid.
                    if (isCurrent)
                    {
                        SelectedItem.Value = selected.OldValue;
                    }

                    // Don't update border when not valid (the border is displaying this fact).
                    return;
                }

                maskingContainer.BorderThickness = isCurrent ? 5 : 0;
            }, true);

            beatmap.BindValueChanged(_ => Scheduler.AddOnce(refresh));
            ruleset.BindValueChanged(_ => Scheduler.AddOnce(refresh));
            valid.BindValueChanged(_ => Scheduler.AddOnce(refresh));
            requiredMods.CollectionChanged += (_, __) => Scheduler.AddOnce(refresh);

            onScreenLoader.DelayedLoadStarted += _ =>
            {
                Task.Run(async() =>
                {
                    try
                    {
                        if (showItemOwner)
                        {
                            var foundUser = await userLookupCache.GetUserAsync(Item.OwnerID).ConfigureAwait(false);
                            Schedule(() => ownerAvatar.User = foundUser);
                        }

                        if (Item.Beatmap.Value == null)
                        {
                            IBeatmapInfo foundBeatmap;

                            if (multiplayerClient != null)
                            {
                                // This call can eventually go away (and use the else case below).
                                // Currently required only due to the method being overridden to provide special behaviour in tests.
                                foundBeatmap = await multiplayerClient.GetAPIBeatmap(Item.BeatmapID).ConfigureAwait(false);
                            }
                            else
                            {
                                foundBeatmap = await beatmapLookupCache.GetBeatmapAsync(Item.BeatmapID).ConfigureAwait(false);
                            }

                            Schedule(() => Item.Beatmap.Value = foundBeatmap);
                        }
                    }
                    catch (Exception e)
                    {
                        Logger.Log($"Error while populating playlist item {e}");
                    }
                });
            };

            refresh();
        }