Пример #1
0
        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;
                }
            }
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
                }
            }
        }
Пример #4
0
        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;
            }
        }
Пример #5
0
        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;
                }
            }
        }
Пример #6
0
        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;
        }
Пример #7
0
 private void CocApi_MembersJoined(ClanApiModel clanApiModel, List <ClanVillageApiModel> memberListApiModels)
 {
     _logService.LogInformation($"{memberListApiModels.Count()} members joined.");
 }
Пример #8
0
 private void CocApi_ClanChanged(ClanApiModel oldClan, ClanApiModel newClan)
 {
     _logService.LogInformation($"{oldClan.ClanTag} {oldClan.Name} changed.");
 }
Пример #9
0
 private void CocApi_ClanBadgeUrlChanged(ClanApiModel oldClan, ClanApiModel newClan)
 {
     _logService.LogInformation(newClan.BadgeUrls?.Large);
 }
Пример #10
0
 private void CocApi_ClanLocationChanged(ClanApiModel oldClan, ClanApiModel newClan)
 {
     _logService.LogInformation(newClan.Location?.Name);
 }
Пример #11
0
 private void CocApi_ClanPointsChanged(ClanApiModel oldClan, int newClanPoints)
 {
     _logService.LogInformation($"{oldClan.ClanTag} {oldClan.Name} new clan points: {newClanPoints}");
 }