Exemple #1
0
        /// <summary>
        /// Queries the character's data. Used generically across multiple methods.
        /// </summary>
        /// <param name="targetMethod">The ESI method to use.</param>
        /// <param name="onError">The callback if an error occurs.</param>
        /// <param name="onSuccess">The callback if the request is successful.</param>
        private void QueryCharacterData <T>(ESIAPICharacterMethods targetMethod,
                                            CharacterQueryMonitor <T> .NotifyErrorCallback onError, Action <T> onSuccess)
            where T : class
        {
            ESIKey apiKey = m_ccpCharacter.Identity.FindAPIKeyWithAccess(targetMethod);

            // Network available, has access
            if (NetworkMonitor.IsNetworkAvailable && apiKey != null)
            {
                EveMonClient.APIProviders.CurrentProvider.QueryEsiAsync <T>(targetMethod,
                                                                            apiKey.AccessToken, m_ccpCharacter.CharacterID, (result, ignore) =>
                {
                    var target = m_ccpCharacter;

                    // Character may have been deleted or set to not be monitored
                    if (target != null && target.Monitored)
                    {
                        // Notify if an error occured
                        if (target.ShouldNotifyError(result, targetMethod))
                        {
                            onError.Invoke(target, result);
                        }
                        if (!result.HasError)
                        {
                            onSuccess.Invoke(result.Result);
                        }
                    }
                });
            }
        }
Exemple #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CharacterDataQuerying"/> class.
        /// </summary>
        /// <param name="ccpCharacter">The CCP character.</param>
        internal CharacterDataQuerying(CCPCharacter ccpCharacter)
        {
            var notifiers = EveMonClient.Notifications;

            m_ccpCharacter           = ccpCharacter;
            m_characterQueryMonitors = new List <IQueryMonitorEx>();

            // Add the monitors in an order as they will appear in the throbber menu
            m_charSheetMonitor = new CharacterQueryMonitor <EsiAPICharacterSheet>(ccpCharacter,
                                                                                  ESIAPICharacterMethods.CharacterSheet, OnCharacterSheetUpdated,
                                                                                  notifiers.NotifyCharacterSheetError);
            m_characterQueryMonitors.Add(m_charSheetMonitor);
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPISkillQueue>(
                                             ccpCharacter, ESIAPICharacterMethods.SkillQueue, OnSkillQueueUpdated,
                                             notifiers.NotifySkillQueueError));
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIStandings>(
                                             ccpCharacter, ESIAPICharacterMethods.Standings, OnStandingsUpdated,
                                             notifiers.NotifyCharacterStandingsError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIContactsList>(
                                             ccpCharacter, ESIAPICharacterMethods.ContactList, OnContactsUpdated,
                                             notifiers.NotifyCharacterContactsError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIFactionalWarfareStats>(
                                             ccpCharacter, ESIAPICharacterMethods.FactionalWarfareStats,
                                             OnFactionalWarfareStatsUpdated, notifiers.
                                             NotifyCharacterFactionalWarfareStatsError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIMedals>(ccpCharacter,
                                                                                  ESIAPICharacterMethods.Medals, OnMedalsUpdated,
                                                                                  notifiers.NotifyCharacterMedalsError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIKillLog>(ccpCharacter,
                                                                                   ESIAPICharacterMethods.KillLog, OnKillLogUpdated,
                                                                                   notifiers.NotifyCharacterKillLogError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIAssetList>(ccpCharacter,
                                                                                     ESIAPICharacterMethods.AssetList, OnAssetsUpdated,
                                                                                     notifiers.NotifyCharacterAssetsError)
            {
                QueryOnStartup = true
            });
            m_charMarketOrdersMonitor = new CharacterQueryMonitor <EsiAPIMarketOrders>(
                ccpCharacter, ESIAPICharacterMethods.MarketOrders, OnMarketOrdersUpdated,
                notifiers.NotifyCharacterMarketOrdersError)
            {
                QueryOnStartup = true
            };
            m_characterQueryMonitors.Add(m_charMarketOrdersMonitor);
            m_charContractsMonitor = new CharacterQueryMonitor <EsiAPIContracts>(ccpCharacter,
                                                                                 ESIAPICharacterMethods.Contracts, OnContractsUpdated,
                                                                                 notifiers.NotifyCharacterContractsError)
            {
                QueryOnStartup = true
            };
            m_characterQueryMonitors.Add(m_charContractsMonitor);
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIWalletJournal>(
                                             ccpCharacter, ESIAPICharacterMethods.WalletJournal, OnWalletJournalUpdated,
                                             notifiers.NotifyCharacterWalletJournalError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIWalletTransactions>(
                                             ccpCharacter, ESIAPICharacterMethods.WalletTransactions,
                                             OnWalletTransactionsUpdated, notifiers.NotifyCharacterWalletTransactionsError)
            {
                QueryOnStartup = true
            });
            m_charIndustryJobsMonitor = new CharacterQueryMonitor <EsiAPIIndustryJobs>(
                ccpCharacter, ESIAPICharacterMethods.IndustryJobs, OnIndustryJobsUpdated,
                notifiers.NotifyCharacterIndustryJobsError)
            {
                QueryOnStartup = true
            };
            m_characterQueryMonitors.Add(m_charIndustryJobsMonitor);
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIResearchPoints>(
                                             ccpCharacter, ESIAPICharacterMethods.ResearchPoints, OnResearchPointsUpdated,
                                             notifiers.NotifyCharacterResearchPointsError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIMailMessages>(
                                             ccpCharacter, ESIAPICharacterMethods.MailMessages, OnEVEMailMessagesUpdated,
                                             notifiers.NotifyEVEMailMessagesError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPINotifications>(
                                             ccpCharacter, ESIAPICharacterMethods.Notifications, OnEVENotificationsUpdated,
                                             notifiers.NotifyEVENotificationsError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPICalendarEvents>(
                                             ccpCharacter, ESIAPICharacterMethods.UpcomingCalendarEvents,
                                             OnUpcomingCalendarEventsUpdated, notifiers.
                                             NotifyCharacterUpcomingCalendarEventsError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIPlanetaryColoniesList>(
                                             ccpCharacter, ESIAPICharacterMethods.PlanetaryColonies,
                                             OnPlanetaryColoniesUpdated, notifiers.
                                             NotifyCharacterPlanetaryColoniesError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.ForEach(monitor => ccpCharacter.QueryMonitors.Add(monitor));

            // Enumerate the basic feature monitors into a separate list
            m_basicFeaturesMonitors = new List <IQueryMonitorEx>(m_characterQueryMonitors.Count);
            long basicFeatures = (long)CCPAPIMethodsEnum.BasicCharacterFeatures;

            foreach (var monitor in m_characterQueryMonitors)
            {
                long method = (long)(ESIAPICharacterMethods)monitor.Method;
                if (method == (method & basicFeatures))
                {
                    m_basicFeaturesMonitors.Add(monitor);
                    // If force update is selected, update basic features only
                    if (ccpCharacter.ForceUpdateBasicFeatures)
                    {
                        monitor.ForceUpdate(true);
                    }
                }
            }

            EveMonClient.TimerTick += EveMonClient_TimerTick;
        }
Exemple #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CharacterDataQuerying"/> class.
        /// </summary>
        /// <param name="ccpCharacter">The CCP character.</param>
        internal CharacterDataQuerying(CCPCharacter ccpCharacter)
        {
            var notifiers = EveMonClient.Notifications;

            m_ccpCharacter           = ccpCharacter;
            m_characterQueryMonitors = new List <IQueryMonitorEx>();
            m_attrResponse           = null;
            m_lastQueue = null;

            // Add the monitors in an order as they will appear in the throbber menu
            m_charSheetMonitor = new CharacterQueryMonitor <EsiAPICharacterSheet>(ccpCharacter,
                                                                                  ESIAPICharacterMethods.CharacterSheet, OnCharacterSheetUpdated,
                                                                                  notifiers.NotifyCharacterSheetError);
            m_characterQueryMonitors.Add(m_charSheetMonitor);
            // Location
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPILocation>(
                                             ccpCharacter, ESIAPICharacterMethods.Location, OnCharacterLocationUpdated,
                                             notifiers.NotifyCharacterLocationError));
            // Clones
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIClones>(
                                             ccpCharacter, ESIAPICharacterMethods.Clones, OnCharacterClonesUpdated,
                                             notifiers.NotifyCharacterClonesError));
            // Implants
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <List <int> >(
                                             ccpCharacter, ESIAPICharacterMethods.Implants, OnCharacterImplantsUpdated,
                                             OnCharacterImplantsFailed));
            // Ship
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIShip>(
                                             ccpCharacter, ESIAPICharacterMethods.Ship, OnCharacterShipUpdated,
                                             notifiers.NotifyCharacterShipError));
            // Skills
            m_charSkillsMonitor = new CharacterQueryMonitor <EsiAPISkills>(
                ccpCharacter, ESIAPICharacterMethods.Skills, OnCharacterSkillsUpdated,
                notifiers.NotifyCharacterSkillsError);
            m_characterQueryMonitors.Add(m_charSkillsMonitor);
            // Skill queue
            m_charSkillQueueMonitor = new CharacterQueryMonitor <EsiAPISkillQueue>(
                ccpCharacter, ESIAPICharacterMethods.SkillQueue, OnSkillQueueUpdated,
                notifiers.NotifySkillQueueError);
            m_characterQueryMonitors.Add(m_charSkillQueueMonitor);
            // Employment history
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIEmploymentHistory>(
                                             ccpCharacter, ESIAPICharacterMethods.EmploymentHistory,
                                             OnCharacterEmploymentUpdated, notifiers.NotifyCharacterEmploymentError));
            // Standings
            m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIStandings,
                                                                EsiStandingsListItem>(new CharacterQueryMonitor <EsiAPIStandings>(
                                                                                          ccpCharacter, ESIAPICharacterMethods.Standings, OnStandingsUpdated,
                                                                                          notifiers.NotifyCharacterStandingsError)
            {
                QueryOnStartup = true
            }));
            // Contacts
            m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIContactsList,
                                                                EsiContactListItem>(new CharacterQueryMonitor <EsiAPIContactsList>(ccpCharacter,
                                                                                                                                   ESIAPICharacterMethods.ContactList, OnContactsUpdated,
                                                                                                                                   notifiers.NotifyCharacterContactsError)
            {
                QueryOnStartup = true
            }));
            // Factional warfare
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIFactionalWarfareStats>(
                                             ccpCharacter, ESIAPICharacterMethods.FactionalWarfareStats,
                                             OnFactionalWarfareStatsUpdated, notifiers.
                                             NotifyCharacterFactionalWarfareStatsError)
            {
                QueryOnStartup = true
            });
            // Medals
            m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIMedals,
                                                                EsiMedalsListItem>(new CharacterQueryMonitor <EsiAPIMedals>(ccpCharacter,
                                                                                                                            ESIAPICharacterMethods.Medals, OnMedalsUpdated,
                                                                                                                            notifiers.NotifyCharacterMedalsError)
            {
                QueryOnStartup = true
            }));
            // Kill log
            m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIKillLog,
                                                                EsiKillLogListItem>(new CharacterQueryMonitor <EsiAPIKillLog>(ccpCharacter,
                                                                                                                              ESIAPICharacterMethods.KillLog, OnKillLogUpdated,
                                                                                                                              notifiers.NotifyCharacterKillLogError)
            {
                QueryOnStartup = true
            }));
            // Assets
            m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIAssetList,
                                                                EsiAssetListItem>(new CharacterQueryMonitor <EsiAPIAssetList>(ccpCharacter,
                                                                                                                              ESIAPICharacterMethods.AssetList, OnAssetsUpdated,
                                                                                                                              notifiers.NotifyCharacterAssetsError)
            {
                QueryOnStartup = true
            }));
            // Market orders
            m_charMarketOrdersMonitor = new CharacterQueryMonitor <EsiAPIMarketOrders>(
                ccpCharacter, ESIAPICharacterMethods.MarketOrders, OnMarketOrdersUpdated,
                notifiers.NotifyCharacterMarketOrdersError)
            {
                QueryOnStartup = true
            };
            m_characterQueryMonitors.Add(m_charMarketOrdersMonitor);
            // Contracts
            m_charContractsMonitor = new PagedQueryMonitor <EsiAPIContracts,
                                                            EsiContractListItem>(new CharacterQueryMonitor <EsiAPIContracts>(ccpCharacter,
                                                                                                                             ESIAPICharacterMethods.Contracts, OnContractsUpdated,
                                                                                                                             notifiers.NotifyCharacterContractsError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.Add(m_charContractsMonitor);
            // Wallet journal
            m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIWalletJournal,
                                                                EsiWalletJournalListItem>(new CharacterQueryMonitor <EsiAPIWalletJournal>(
                                                                                              ccpCharacter, ESIAPICharacterMethods.WalletJournal, OnWalletJournalUpdated,
                                                                                              notifiers.NotifyCharacterWalletJournalError)
            {
                QueryOnStartup = true
            }));
            // Wallet balance
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <string>(
                                             ccpCharacter, ESIAPICharacterMethods.AccountBalance, OnWalletBalanceUpdated,
                                             notifiers.NotifyCharacterBalanceError));
            // Wallet transactions
            m_characterQueryMonitors.Add(new PagedQueryMonitor <EsiAPIWalletTransactions,
                                                                EsiWalletTransactionsListItem>(new CharacterQueryMonitor <
                                                                                                   EsiAPIWalletTransactions>(ccpCharacter, ESIAPICharacterMethods.
                                                                                                                             WalletTransactions, OnWalletTransactionsUpdated, notifiers.
                                                                                                                             NotifyCharacterWalletTransactionsError)
            {
                QueryOnStartup = true
            }));
            // Industry
            m_charIndustryJobsMonitor = new CharacterQueryMonitor <EsiAPIIndustryJobs>(
                ccpCharacter, ESIAPICharacterMethods.IndustryJobs, OnIndustryJobsUpdated,
                notifiers.NotifyCharacterIndustryJobsError)
            {
                QueryOnStartup = true
            };
            m_characterQueryMonitors.Add(m_charIndustryJobsMonitor);
            // Research points
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIResearchPoints>(
                                             ccpCharacter, ESIAPICharacterMethods.ResearchPoints, OnResearchPointsUpdated,
                                             notifiers.NotifyCharacterResearchPointsError)
            {
                QueryOnStartup = true
            });
            // Mail
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIMailMessages>(
                                             ccpCharacter, ESIAPICharacterMethods.MailMessages, OnEVEMailMessagesUpdated,
                                             notifiers.NotifyEVEMailMessagesError)
            {
                QueryOnStartup = true
            });
            // Mailing lists
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIMailingLists>(
                                             ccpCharacter, ESIAPICharacterMethods.MailingLists, OnEveMailingListsUpdated,
                                             notifiers.NotifyMailingListsError));
            // Notifications
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPINotifications>(
                                             ccpCharacter, ESIAPICharacterMethods.Notifications, OnEVENotificationsUpdated,
                                             notifiers.NotifyEVENotificationsError)
            {
                QueryOnStartup = true
            });
            // Calendar
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPICalendarEvents>(
                                             ccpCharacter, ESIAPICharacterMethods.UpcomingCalendarEvents,
                                             OnUpcomingCalendarEventsUpdated, notifiers.
                                             NotifyCharacterUpcomingCalendarEventsError)
            {
                QueryOnStartup = true
            });
            // PI
            m_characterQueryMonitors.Add(new CharacterQueryMonitor <EsiAPIPlanetaryColoniesList>(
                                             ccpCharacter, ESIAPICharacterMethods.PlanetaryColonies,
                                             OnPlanetaryColoniesUpdated, notifiers.
                                             NotifyCharacterPlanetaryColoniesError)
            {
                QueryOnStartup = true
            });
            m_characterQueryMonitors.ForEach(monitor => ccpCharacter.QueryMonitors.Add(monitor));

            // Enumerate the basic feature monitors into a separate list
            m_basicFeaturesMonitors = new List <IQueryMonitorEx>(m_characterQueryMonitors.Count);
            long basicFeatures = (long)CCPAPIMethodsEnum.BasicCharacterFeatures;

            foreach (var monitor in m_characterQueryMonitors)
            {
                long method = (long)(ESIAPICharacterMethods)monitor.Method;
                if (method == (method & basicFeatures))
                {
                    m_basicFeaturesMonitors.Add(monitor);
                    // If force update is selected, update basic features only
                    if (ccpCharacter.ForceUpdateBasicFeatures)
                    {
                        monitor.ForceUpdate(true);
                    }
                }
            }

            EveMonClient.TimerTick += EveMonClient_TimerTick;
        }
Exemple #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="CharacterDataQuerying"/> class.
        /// </summary>
        /// <param name="ccpCharacter">The CCP character.</param>
        internal CharacterDataQuerying(CCPCharacter ccpCharacter)
        {
            // Initializes the query monitors
            m_ccpCharacter           = ccpCharacter;
            m_characterQueryMonitors = new List <IQueryMonitorEx>();

            m_charSheetMonitor = new CharacterQueryMonitor <EsiAPICharacterSheet>(ccpCharacter,
                                                                                  ESIAPICharacterMethods.CharacterSheet, OnCharacterSheetUpdated);
            IQueryMonitorEx skillQueueMonitor = new CharacterQueryMonitor <EsiAPISkillQueue>(ccpCharacter,
                                                                                             ESIAPICharacterMethods.SkillQueue, OnSkillQueueUpdated);
            IQueryMonitorEx charStandingsMonitor = new CharacterQueryMonitor <EsiAPIStandings>(ccpCharacter,
                                                                                               ESIAPICharacterMethods.Standings, OnStandingsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charContactsMonitor = new CharacterQueryMonitor <EsiAPIContactsList>(ccpCharacter,
                                                                                                 ESIAPICharacterMethods.ContactList, OnContactsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charFacWarStatsMonitor = new CharacterQueryMonitor <EsiAPIFactionalWarfareStats>(ccpCharacter,
                                                                                                             ESIAPICharacterMethods.FactionalWarfareStats, OnFactionalWarfareStatsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charMedalsMonitor = new CharacterQueryMonitor <EsiAPIMedals>(ccpCharacter,
                                                                                         ESIAPICharacterMethods.Medals, OnMedalsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charKillLogMonitor = new CharacterQueryMonitor <EsiAPIKillLog>(ccpCharacter,
                                                                                           ESIAPICharacterMethods.KillLog, OnKillLogUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charAssetsMonitor = new CharacterQueryMonitor <EsiAPIAssetList>(ccpCharacter,
                                                                                            ESIAPICharacterMethods.AssetList, OnAssetsUpdated)
            {
                QueryOnStartup = true
            };

            m_charMarketOrdersMonitor = new CharacterQueryMonitor <EsiAPIMarketOrders>(ccpCharacter,
                                                                                       ESIAPICharacterMethods.MarketOrders, OnMarketOrdersUpdated)
            {
                QueryOnStartup = true
            };
            m_charContractsMonitor = new CharacterQueryMonitor <EsiAPIContracts>(ccpCharacter,
                                                                                 ESIAPICharacterMethods.Contracts, OnContractsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charWalletJournalMonitor = new CharacterQueryMonitor <EsiAPIWalletJournal>(ccpCharacter,
                                                                                                       ESIAPICharacterMethods.WalletJournal, OnWalletJournalUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charWalletTransactionsMonitor = new CharacterQueryMonitor <EsiAPIWalletTransactions>(ccpCharacter,
                                                                                                                 ESIAPICharacterMethods.WalletTransactions, OnWalletTransactionsUpdated)
            {
                QueryOnStartup = true
            };

            m_charIndustryJobsMonitor = new CharacterQueryMonitor <EsiAPIIndustryJobs>(ccpCharacter,
                                                                                       ESIAPICharacterMethods.IndustryJobs, OnIndustryJobsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charResearchPointsMonitor = new CharacterQueryMonitor <EsiAPIResearchPoints>(ccpCharacter,
                                                                                                         ESIAPICharacterMethods.ResearchPoints, OnResearchPointsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charEVEMailMessagesMonitor = new CharacterQueryMonitor <EsiAPIMailMessages>(ccpCharacter,
                                                                                                        ESIAPICharacterMethods.MailMessages, OnEVEMailMessagesUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charEVENotificationsMonitor = new CharacterQueryMonitor <EsiAPINotifications>(ccpCharacter,
                                                                                                          ESIAPICharacterMethods.Notifications, OnEVENotificationsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charUpcomingCalendarEventsMonitor = new CharacterQueryMonitor <EsiAPICalendarEvents>(ccpCharacter,
                                                                                                                 ESIAPICharacterMethods.UpcomingCalendarEvents, OnUpcomingCalendarEventsUpdated)
            {
                QueryOnStartup = true
            };
            IQueryMonitorEx charPlanetaryColoniesMonitor = new CharacterQueryMonitor <EsiAPIPlanetaryColoniesList>(ccpCharacter,
                                                                                                                   ESIAPICharacterMethods.PlanetaryColonies, OnPlanetaryColoniesUpdated)
            {
                QueryOnStartup = true
            };

            // Add the monitors in an order as they will appear in the throbber menu
            m_characterQueryMonitors.AddRange(new[]
            {
                m_charSheetMonitor,
                skillQueueMonitor,
                charStandingsMonitor,
                charContactsMonitor,
                charFacWarStatsMonitor,
                charMedalsMonitor,
                charKillLogMonitor,
                charAssetsMonitor,
                m_charMarketOrdersMonitor,
                m_charContractsMonitor,
                charWalletJournalMonitor,
                charWalletTransactionsMonitor,
                m_charIndustryJobsMonitor,
                charPlanetaryColoniesMonitor,
                charResearchPointsMonitor,
                charEVEMailMessagesMonitor,
                charEVENotificationsMonitor,
                charUpcomingCalendarEventsMonitor
            });

            m_characterQueryMonitors.ForEach(monitor => ccpCharacter.QueryMonitors.Add(monitor));

            m_basicFeaturesMonitors = m_characterQueryMonitors
                                      .Select(monitor =>
                                              new
            {
                monitor,
                method = (ESIAPICharacterMethods)monitor.Method
            })
                                      .Where(monitor =>
                                             (long)monitor.method == ((long)monitor.method & (long)CCPAPIMethodsEnum.BasicCharacterFeatures))
                                      .Select(basicFeature => basicFeature.monitor)
                                      .ToList();

            if (ccpCharacter.ForceUpdateBasicFeatures)
            {
                m_basicFeaturesMonitors.ForEach(monitor => monitor.ForceUpdate(true));
            }

            EveMonClient.TimerTick += EveMonClient_TimerTick;
        }