示例#1
0
        private void lookup(BeatmapSetInfo set, BeatmapInfo beatmapInfo)
        {
            if (checkLocalCache(set, beatmapInfo))
            {
                return;
            }

            if (api?.State.Value != APIState.Online)
            {
                return;
            }

            var req = new GetBeatmapRequest(beatmapInfo);

            req.Failure += fail;

            try
            {
                // intentionally blocking to limit web request concurrency
                api.Perform(req);

                var res = req.Response;

                if (res != null)
                {
                    beatmapInfo.Status              = res.Status;
                    beatmapInfo.BeatmapSet.Status   = res.BeatmapSet?.Status ?? BeatmapOnlineStatus.None;
                    beatmapInfo.BeatmapSet.OnlineID = res.OnlineBeatmapSetID;
                    beatmapInfo.OnlineID            = res.OnlineID;

                    if (beatmapInfo.Metadata != null)
                    {
                        beatmapInfo.Metadata.AuthorID = res.AuthorID;
                    }

                    if (beatmapInfo.BeatmapSet.Metadata != null)
                    {
                        beatmapInfo.BeatmapSet.Metadata.AuthorID = res.AuthorID;
                    }

                    logForModel(set, $"Online retrieval mapped {beatmapInfo} to {res.OnlineBeatmapSetID} / {res.OnlineID}.");
                }
            }
            catch (Exception e)
            {
                fail(e);
            }

            void fail(Exception e)
            {
                beatmapInfo.OnlineID = null;
                logForModel(set, $"Online retrieval failed for {beatmapInfo} ({e.Message})");
            }
        }
示例#2
0
            private void update(BeatmapSetInfo set, BeatmapInfo beatmap)
            {
                if (api?.State != APIState.Online)
                {
                    return;
                }

                var req = new GetBeatmapRequest(beatmap);

                req.Failure += fail;

                try
                {
                    // intentionally blocking to limit web request concurrency
                    api.Perform(req);

                    var res = req.Result;

                    if (res != null)
                    {
                        beatmap.Status                        = res.Status;
                        beatmap.BeatmapSet.Status             = res.BeatmapSet.Status;
                        beatmap.BeatmapSet.OnlineBeatmapSetID = res.OnlineBeatmapSetID;
                        beatmap.OnlineBeatmapID               = res.OnlineBeatmapID;

                        LogForModel(set, $"Online retrieval mapped {beatmap} to {res.OnlineBeatmapSetID} / {res.OnlineBeatmapID}.");
                    }
                }
                catch (Exception e)
                {
                    fail(e);
                }

                void fail(Exception e)
                {
                    beatmap.OnlineBeatmapID = null;
                    LogForModel(set, $"Online retrieval failed for {beatmap} ({e.Message})");
                }
            }