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