private async Task UpdateWarsAsync(ClanApiModel storedClan, ILeagueGroup?leagueGroup) { for (int i = 0; i < storedClan.Wars.Count; i++) { var storedWar = storedClan.Wars.ElementAt(i).Value; IWar?downloadedWar = await _cocApi.GetCurrentWarOrDefaultAsync(storedWar); //if (storedWar is LeagueWarApiModel leagueWar) //{ // leagueWar.Update(_cocApi, leagueWar, leagueGroup); //} //else //if (storedWar is CurrentWarApiModel currentWar) //{ ((CurrentWarApiModel)storedWar).Update(_cocApi, downloadedWar, null); //} if (downloadedWar is ICurrentWarApiModel downloadedCurrentWar) { downloadedCurrentWar.Flags = storedWar.Flags; storedClan.Wars[storedWar.WarId] = downloadedCurrentWar; } } }
private async Task UpdateVillagesAsync(ClanApiModel storedClan) { if (_cocApi.DownloadVillages && storedClan.DownloadVillages) { //_cocApi.Logger?.LogDebug(LoggingEvents.UpdatingClan, "{source} UpdateVillagesAsync({clanTag})", _source, storedClan.ClanTag); List <Task> tasks = new List <Task>(); foreach (var village in storedClan.Villages.EmptyIfNull()) { tasks.Add(UpdateVillageAsync(village)); } await Task.WhenAll(tasks); } }
private async Task DownloadLeagueWarsAsync(ClanApiModel storedClan, ILeagueGroup?leagueGroup) { if (leagueGroup is LeagueGroupApiModel leagueGroupApiModel) { if (_cocApi.IsDownloadingLeagueWars() && storedClan.DownloadLeagueWars && leagueGroupApiModel != null) { List <Task> tasks = new List <Task>(); foreach (var round in leagueGroupApiModel.Rounds.EmptyIfNull()) { tasks.Add(DownloadRoundAsync(storedClan, round)); } await Task.WhenAll(tasks); } } }
private void AnnounceNewWar(ClanApiModel storedClan, CurrentWarApiModel currentWarApiModel) { lock (currentWarApiModel.NewWarLock) { if (currentWarApiModel.Flags.WarAnnounced) { return; } //we only announce wars if this flag is false to avoid spamming new war events when the program starts. if (storedClan.AnnounceWars) { _cocApi.NewWarEvent(currentWarApiModel); } currentWarApiModel.Flags.WarAnnounced = true; } }
private async Task DownloadRoundAsync(ClanApiModel storedClan, RoundApiModel round) { foreach (var warTag in round.WarTags.EmptyIfNull().Where(w => w != "#0")) { ICurrentWarApiModel leagueWar = await _cocApi.GetLeagueWarAsync(warTag, allowStoredItem : true, allowExpiredItem : false); if (leagueWar.Clans.Any(c => c.ClanTag == storedClan.ClanTag)) { storedClan.Wars.TryAdd(leagueWar.WarId, leagueWar); continue; } if (!_continueUpdatingObjects || !_cocApi.IsDownloadingLeagueWars() || !storedClan.DownloadLeagueWars) { return; } } }
private async Task UpdateClanAsync(string clanString) { Task?task; _cocApi.Logger?.LogDebug(LoggingEvents.UpdatingClan, "{source} UpdateClanAsync({clanString})", _source, clanString); ClanApiModel storedClan = await _cocApi.GetClanAsync(clanString, allowStoredItem : true, allowExpiredItem : true); ClanApiModel downloadedClan = await _cocApi.GetClanAsync(clanString, allowStoredItem : true, allowExpiredItem : false); storedClan.Update(_cocApi, downloadedClan); ICurrentWarApiModel?currentWarApiModel = null; if (downloadedClan.IsWarLogPublic) { currentWarApiModel = await _cocApi.GetCurrentWarOrDefaultAsync(storedClan.ClanTag, allowStoredItem : true, allowExpiredItem : false) as ICurrentWarApiModel; } if (currentWarApiModel is CurrentWarApiModel currentWar) { storedClan.Wars.TryAdd(currentWar.WarId, currentWar); } ILeagueGroup?leagueGroup = null; if (_cocApi.IsDownloadingLeagueWars() && (currentWarApiModel == null || currentWarApiModel is LeagueWarApiModel)) { leagueGroup = await _cocApi.GetLeagueGroupAsync(storedClan.ClanTag); task = DownloadLeagueWarsAsync(storedClan, leagueGroup); await SwallowAsync(task, $"{nameof(DownloadLeagueWarsAsync)}({ClanStrings})"); } if (storedClan.AnnounceWars == false) { //We have tried to download all wars at least once, announce future wars. This prevents all wars from being announced on startup storedClan.AnnounceWars = true; foreach (var war in storedClan.Wars.Values) { war.Flags.WarAnnounced = true; } } else { foreach (var war in storedClan.Wars.Values) { AnnounceNewWar(storedClan, (CurrentWarApiModel)war); } } task = UpdateWarsAsync(storedClan, leagueGroup); await SwallowAsync(task, $"{nameof(UpdateWarsAsync)}({ClanStrings})"); task = UpdateVillagesAsync(storedClan); await SwallowAsync(task, $"{nameof(UpdateVillageAsync)}({clanString})"); downloadedClan.AnnounceWars = storedClan.AnnounceWars; downloadedClan.DownloadLeagueWars = storedClan.DownloadLeagueWars; downloadedClan.DownloadVillages = storedClan.DownloadVillages; downloadedClan.Wars = storedClan.Wars; _cocApi.AllClans[downloadedClan.ClanTag] = downloadedClan; }
private void CocApi_MembersJoined(ClanApiModel clanApiModel, List <ClanVillageApiModel> memberListApiModels) { _logService.LogInformation($"{memberListApiModels.Count()} members joined."); }
private void CocApi_ClanChanged(ClanApiModel oldClan, ClanApiModel newClan) { _logService.LogInformation($"{oldClan.ClanTag} {oldClan.Name} changed."); }
private void CocApi_ClanBadgeUrlChanged(ClanApiModel oldClan, ClanApiModel newClan) { _logService.LogInformation(newClan.BadgeUrls?.Large); }
private void CocApi_ClanLocationChanged(ClanApiModel oldClan, ClanApiModel newClan) { _logService.LogInformation(newClan.Location?.Name); }
private void CocApi_ClanPointsChanged(ClanApiModel oldClan, int newClanPoints) { _logService.LogInformation($"{oldClan.ClanTag} {oldClan.Name} new clan points: {newClanPoints}"); }