KiCad PCB EDA Suite
Loading...
Searching...
No Matches
PLUGIN_CONTENT_MANAGER Class Reference

Main class of Plugin and Content Manager subsystem. More...

#include <pcm.h>

Public Member Functions

 PLUGIN_CONTENT_MANAGER (std::function< void(int)> aAvailableUpdateCallbac)
 
 ~PLUGIN_CONTENT_MANAGER ()
 
void SaveInstalledPackages ()
 Saves metadata of installed packages to disk.
 
bool FetchRepository (const wxString &aUrl, PCM_REPOSITORY &aRepository, PROGRESS_REPORTER *aReporter)
 Fetches repository metadata from given url.
 
void ValidateJson (const nlohmann::json &aJson, const nlohmann::json_uri &aUri=nlohmann::json_uri("#")) const
 Validates json against a specific definition in the PCM schema.
 
bool VerifyHash (std::istream &aStream, const wxString &aHash) const
 Verifies SHA256 hash of a binary stream.
 
void SetRepositoryList (const STRING_PAIR_LIST &aRepositories)
 Set list of repositories.
 
void DiscardRepositoryCache (const wxString &aRepositoryId)
 Discard in-memory and on-disk cache of a repository.
 
void MarkInstalled (const PCM_PACKAGE &aPackage, const wxString &aVersion, const wxString &aRepositoryId)
 Mark package as installed.
 
void MarkUninstalled (const PCM_PACKAGE &aPackage)
 Mark package as uninstalled.
 
const STRING_TUPLE_LISTGetRepositoryList () const
 Get list of repositories.
 
bool CacheRepository (const wxString &aRepositoryId)
 Cache specified repository packages and other metadata.
 
const std::vector< PCM_PACKAGE > & GetRepositoryPackages (const wxString &aRepositoryId) const
 Get the packages metadata from a previously cached repository.
 
const std::vector< PCM_INSTALLATION_ENTRYGetInstalledPackages () const
 Get list of installed packages.
 
const wxString & GetInstalledPackageVersion (const wxString &aPackageId) const
 Get the current version of an installed package.
 
const wxString & Get3rdPartyPath () const
 
PCM_PACKAGE_STATE GetPackageState (const wxString &aRepositoryId, const wxString &aPackageId)
 Get current state of the package.
 
bool IsPackagePinned (const wxString &aPackageId) const
 Returns pinned status of a package.
 
void SetPinned (const wxString &aPackageId, const bool aPinned)
 Set the pinned status of a package.
 
const wxString GetPackageUpdateVersion (const PCM_PACKAGE &aPackage)
 Get the preferred package update version or empty string if there is none.
 
bool DownloadToStream (const wxString &aUrl, std::ostream *aOutput, PROGRESS_REPORTER *aReporter, const size_t aSizeLimit=DEFAULT_DOWNLOAD_MEM_LIMIT)
 Downloads url to an output stream.
 
int GetPackageSearchRank (const PCM_PACKAGE &aPackage, const wxString &aSearchTerm)
 Get the approximate measure of how much given package matches the search term.
 
std::unordered_map< wxString, wxBitmap > GetRepositoryPackageBitmaps (const wxString &aRepositoryId)
 Get the icon bitmaps for repository packages.
 
std::unordered_map< wxString, wxBitmap > GetInstalledPackageBitmaps ()
 Get the icon bitmaps for installed packages.
 
void SetDialogWindow (wxWindow *aDialog)
 Set the Dialog Window.
 
void RunBackgroundUpdate ()
 Runs a background update thread that checks for new package versions.
 
void StopBackgroundUpdate ()
 Interrupts and joins() the update thread.
 
void ReadEnvVar ()
 Stores 3rdparty path from environment variables.
 

Static Public Member Functions

static void PreparePackage (PCM_PACKAGE &aPackage)
 Parses version strings and calculates compatibility.
 

Private Member Functions

bool fetchPackages (const wxString &aUrl, const std::optional< wxString > &aHash, std::vector< PCM_PACKAGE > &aPackages, PROGRESS_REPORTER *aReporter)
 Downloads packages metadata to in memory stream, verifies hash and attempts to parse it.
 
const PCM_REPOSITORYgetCachedRepository (const wxString &aRepositoryId) const
 Get the cached repository metadata.
 
void updateInstalledPackagesMetadata (const wxString &aRepositoryId)
 Updates metadata of installed packages from freshly fetched repo.
 
time_t getCurrentTimestamp () const
 

Private Attributes

wxWindow * m_dialog
 
nlohmann::json_schema::json_validator m_schema_validator
 
wxString m_3rdparty_path
 
wxString m_cache_path
 
std::unordered_map< wxString, PCM_REPOSITORYm_repository_cache
 
STRING_TUPLE_LIST m_repository_list
 
std::map< wxString, PCM_INSTALLATION_ENTRYm_installed
 
std::function< void(int)> m_availableUpdateCallback
 
std::thread m_updateThread
 
std::shared_ptr< BACKGROUND_JOBm_updateBackgroundJob
 

Static Private Attributes

static constexpr size_t DEFAULT_DOWNLOAD_MEM_LIMIT = 10 * 1024 * 1024
 < Default download limit of 10 Mb to not use too much memory
 
static const std::tuple< int, int, int > m_kicad_version
 

Detailed Description

Main class of Plugin and Content Manager subsystem.

This class handles logistics of repository management, caching, json validation, tracking installed packages and provides some utility methods.

Repository caching is done in $KICADX_3RD_PARTY/cache directory with each repository storing it's metadata, packages and optionally resource files under it's id subdirectory.

Repository id is a prefix of sha256 of it's main url.

JSON schema file is expected to be in $KICAD_DATA/schemas directory

Installed packages are stored in <user_settings>/installed_packages.json If that file is missing PCM will try to reconstruct it from existing directory structure inside $KICADX_3RD_PARTY but package descriptions and other metadata will be lost.

Definition at line 104 of file pcm.h.

Constructor & Destructor Documentation

◆ PLUGIN_CONTENT_MANAGER()

◆ ~PLUGIN_CONTENT_MANAGER()

PLUGIN_CONTENT_MANAGER::~PLUGIN_CONTENT_MANAGER ( )

Definition at line 1197 of file pcm.cpp.

References StopBackgroundUpdate().

Member Function Documentation

◆ CacheRepository()

bool PLUGIN_CONTENT_MANAGER::CacheRepository ( const wxString &  aRepositoryId)

Cache specified repository packages and other metadata.

This method fetches latest repository metadata, checks if there is cache on disk, compares it's last update timestamp to repository metadata and redownloads packages list if necessary. Then it checks sha256 if provided and parses the package list. Parsed packages metadata is stored in memory.

Process is repeated with resources file except it is just stored on disk and any errors at this stage are ignored.

Parameters
aRepositoryIdid of the repository to cache
Returns
true if packages metadata was cached successfully

Definition at line 392 of file pcm.cpp.

References _, DownloadToStream(), fetchPackages(), FetchRepository(), getCurrentTimestamp(), PATHS::GetUserCachePath(), m_dialog, m_repository_cache, m_repository_list, m_updateBackgroundJob, PCM_REPOSITORY::package_list, PCM_REPOSITORY::package_map, PCM_REPOSITORY::packages, PreparePackage(), PCM_REPOSITORY::resources, PCM_RESOURCE_REFERENCE::sha256, PCM_RESOURCE_REFERENCE::update_timestamp, updateInstalledPackagesMetadata(), PCM_RESOURCE_REFERENCE::url, and VerifyHash().

Referenced by GetPackageState(), and RunBackgroundUpdate().

◆ DiscardRepositoryCache()

void PLUGIN_CONTENT_MANAGER::DiscardRepositoryCache ( const wxString &  aRepositoryId)

Discard in-memory and on-disk cache of a repository.

Parameters
aRepositoryIdid of the repository

Definition at line 751 of file pcm.cpp.

References PATHS::GetUserCachePath(), and m_repository_cache.

Referenced by SetRepositoryList().

◆ DownloadToStream()

bool PLUGIN_CONTENT_MANAGER::DownloadToStream ( const wxString &  aUrl,
std::ostream *  aOutput,
PROGRESS_REPORTER aReporter,
const size_t  aSizeLimit = DEFAULT_DOWNLOAD_MEM_LIMIT 
)

Downloads url to an output stream.

Parameters
aUrlURL to download
aOutputoutput stream
aReporterprogress dialog to use
aSizeLimitmaximum download size, 0 for unlimited
Returns
true if download was successful
false if download failed or was too large

Definition at line 214 of file pcm.cpp.

References _, KICAD_CURL_EASY::GetErrorText(), PROGRESS_REPORTER::IsCancelled(), PROGRESS_REPORTER::KeepRefreshing(), m_dialog, KICAD_CURL_EASY::Perform(), PROGRESS_REPORTER::Report(), PROGRESS_REPORTER::SetCurrentProgress(), KICAD_CURL_EASY::SetFollowRedirects(), KICAD_CURL_EASY::SetOutputStream(), KICAD_CURL_EASY::SetTransferCallback(), and KICAD_CURL_EASY::SetURL().

Referenced by CacheRepository(), fetchPackages(), and FetchRepository().

◆ fetchPackages()

bool PLUGIN_CONTENT_MANAGER::fetchPackages ( const wxString &  aUrl,
const std::optional< wxString > &  aHash,
std::vector< PCM_PACKAGE > &  aPackages,
PROGRESS_REPORTER aReporter 
)
private

Downloads packages metadata to in memory stream, verifies hash and attempts to parse it.

Parameters
aUrlURL of the packages metadata
aHashoptional sha256 hash
aPackagesresulting packages metadata list
aReporterprogress dialog to use for download
Returns
true if packages were successfully downloaded, verified and parsed

Definition at line 321 of file pcm.cpp.

References _, DownloadToStream(), m_dialog, PROGRESS_REPORTER::SetTitle(), ValidateJson(), and VerifyHash().

Referenced by CacheRepository().

◆ FetchRepository()

bool PLUGIN_CONTENT_MANAGER::FetchRepository ( const wxString &  aUrl,
PCM_REPOSITORY aRepository,
PROGRESS_REPORTER aReporter 
)

Fetches repository metadata from given url.

Parameters
aUrlURL of the repository
aRepositoryfetched repository metadata
aReporterprogress reporter dialog to use for download
Returns
true if successful
false if URL could not be downloaded or result could not be parsed

Definition at line 272 of file pcm.cpp.

References _, DownloadToStream(), m_dialog, PROGRESS_REPORTER::SetTitle(), and ValidateJson().

Referenced by CacheRepository().

◆ Get3rdPartyPath()

const wxString & PLUGIN_CONTENT_MANAGER::Get3rdPartyPath ( ) const
inline

Definition at line 234 of file pcm.h.

References m_3rdparty_path.

◆ getCachedRepository()

const PCM_REPOSITORY & PLUGIN_CONTENT_MANAGER::getCachedRepository ( const wxString &  aRepositoryId) const
private

Get the cached repository metadata.

Parameters
aRepositoryIdid of the repository
Returns
const PCM_REPOSITORY&

Definition at line 383 of file pcm.cpp.

References m_repository_cache.

Referenced by GetPackageState(), GetRepositoryPackages(), MarkInstalled(), and updateInstalledPackagesMetadata().

◆ getCurrentTimestamp()

time_t PLUGIN_CONTENT_MANAGER::getCurrentTimestamp ( ) const
private

Definition at line 881 of file pcm.cpp.

Referenced by CacheRepository(), and MarkInstalled().

◆ GetInstalledPackageBitmaps()

std::unordered_map< wxString, wxBitmap > PLUGIN_CONTENT_MANAGER::GetInstalledPackageBitmaps ( )

Get the icon bitmaps for installed packages.

Icons for installed packages are taken from package extracted files in $KICADX_3RD_PARTY/resources/<packageid> directories

Returns
map of package id -> bitmap

Definition at line 1066 of file pcm.cpp.

References m_3rdparty_path.

◆ GetInstalledPackages()

const std::vector< PCM_INSTALLATION_ENTRY > PLUGIN_CONTENT_MANAGER::GetInstalledPackages ( ) const

Get list of installed packages.

Returns
vector of PCM_INSTALLATION_ENTRY objects

Definition at line 912 of file pcm.cpp.

References m_installed.

◆ GetInstalledPackageVersion()

const wxString & PLUGIN_CONTENT_MANAGER::GetInstalledPackageVersion ( const wxString &  aPackageId) const

Get the current version of an installed package.

Parameters
aPackageIdid of the package
Returns
current version
Exceptions
std::out_of_rangeif package with given id is not installed Returns current 3rd party directory path

Definition at line 935 of file pcm.cpp.

References m_installed.

◆ GetPackageSearchRank()

int PLUGIN_CONTENT_MANAGER::GetPackageSearchRank ( const PCM_PACKAGE aPackage,
const wxString &  aSearchTerm 
)

Get the approximate measure of how much given package matches the search term.

Parameters
aPackagepackage metadata object
aSearchTermsearch term
Returns
int search rank, higher number means better match, 0 means no match

Definition at line 962 of file pcm.cpp.

References PCM_PACKAGE::author, PCM_PACKAGE::description, PCM_PACKAGE::description_full, PCM_PACKAGE::identifier, PCM_PACKAGE::license, PCM_PACKAGE::maintainer, PCM_CONTACT::name, PCM_PACKAGE::name, PCM_PACKAGE::resources, and PCM_PACKAGE::tags.

◆ GetPackageState()

PCM_PACKAGE_STATE PLUGIN_CONTENT_MANAGER::GetPackageState ( const wxString &  aRepositoryId,
const wxString &  aPackageId 
)

Get current state of the package.

Parameters
aRepositoryIdrepository id
aPackageIdpackage id
Returns
PCM_PACKAGE_STATE

Definition at line 807 of file pcm.cpp.

References CacheRepository(), getCachedRepository(), GetPackageUpdateVersion(), m_installed, PCM_REPOSITORY::package_list, PCM_REPOSITORY::package_map, PPS_AVAILABLE, PPS_INSTALLED, PPS_UNAVAILABLE, PPS_UPDATE_AVAILABLE, and PCM_PACKAGE::versions.

Referenced by RunBackgroundUpdate().

◆ GetPackageUpdateVersion()

const wxString PLUGIN_CONTENT_MANAGER::GetPackageUpdateVersion ( const PCM_PACKAGE aPackage)

Get the preferred package update version or empty string if there is none.

Works only for installed packages and returns highest compatible version greater than currently installed that is at the same or higher (numerically lower) version stability level.

Parameters
aPackagepackage
Returns
package version string

Definition at line 853 of file pcm.cpp.

References PCM_PACKAGE::identifier, m_installed, PCM_INSTALLATION_ENTRY::package, and PCM_PACKAGE::versions.

Referenced by GetPackageState().

◆ GetRepositoryList()

const STRING_TUPLE_LIST & PLUGIN_CONTENT_MANAGER::GetRepositoryList ( ) const
inline

Get list of repositories.

Returns
const STRING_TUPLE_LIST& list of repositories in <id, URL, name> tuple format

Definition at line 188 of file pcm.h.

References m_repository_list.

◆ GetRepositoryPackageBitmaps()

std::unordered_map< wxString, wxBitmap > PLUGIN_CONTENT_MANAGER::GetRepositoryPackageBitmaps ( const wxString &  aRepositoryId)

Get the icon bitmaps for repository packages.

Repository package icons are taken from repository's resources zip file

Parameters
aRepositoryIdid of the repository
Returns
map of package id -> bitmap

Definition at line 1023 of file pcm.cpp.

References PATHS::GetUserCachePath(), image, and zip.

◆ GetRepositoryPackages()

const std::vector< PCM_PACKAGE > & PLUGIN_CONTENT_MANAGER::GetRepositoryPackages ( const wxString &  aRepositoryId) const

Get the packages metadata from a previously cached repository.

This should only be called after a successful CacheRepository call

Parameters
aRepositoryIdid of the repository
Returns
list of package metadata objects

Definition at line 707 of file pcm.cpp.

References empty(), getCachedRepository(), and PCM_REPOSITORY::package_list.

◆ IsPackagePinned()

bool PLUGIN_CONTENT_MANAGER::IsPackagePinned ( const wxString &  aPackageId) const

Returns pinned status of a package.

Parameters
aPackageIdpackage id
Returns
true if package is installed and is pinned
false if package is not installed or not pinned

Definition at line 944 of file pcm.cpp.

References m_installed.

◆ MarkInstalled()

void PLUGIN_CONTENT_MANAGER::MarkInstalled ( const PCM_PACKAGE aPackage,
const wxString &  aVersion,
const wxString &  aRepositoryId 
)

Mark package as installed.

Parameters
aPackagepackage metadata
aVersioninstalled package version
aRepositoryIdid of the source repository or empty estring if installed from a local file

Definition at line 765 of file pcm.cpp.

References _, PCM_INSTALLATION_ENTRY::current_version, getCachedRepository(), getCurrentTimestamp(), PCM_PACKAGE::identifier, PCM_INSTALLATION_ENTRY::install_timestamp, m_installed, MarkUninstalled(), PCM_REPOSITORY::name, PCM_INSTALLATION_ENTRY::package, PCM_INSTALLATION_ENTRY::pinned, PCM_INSTALLATION_ENTRY::repository_id, and PCM_INSTALLATION_ENTRY::repository_name.

◆ MarkUninstalled()

void PLUGIN_CONTENT_MANAGER::MarkUninstalled ( const PCM_PACKAGE aPackage)

Mark package as uninstalled.

Parameters
aPackagepackage metadata

Definition at line 801 of file pcm.cpp.

References PCM_PACKAGE::identifier, and m_installed.

Referenced by MarkInstalled().

◆ PreparePackage()

void PLUGIN_CONTENT_MANAGER::PreparePackage ( PCM_PACKAGE aPackage)
static

Parses version strings and calculates compatibility.

This should be called after loading package metadata from repository or from installation entries

Parameters
aPackagepackage metadata object

Definition at line 629 of file pcm.cpp.

References PACKAGE_VERSION::compatible, PACKAGE_VERSION::kicad_version, PACKAGE_VERSION::kicad_version_max, m_kicad_version, PACKAGE_VERSION::parsed_version, PACKAGE_VERSION::platforms, PACKAGE_VERSION::version, PACKAGE_VERSION::version_epoch, and PCM_PACKAGE::versions.

Referenced by CacheRepository(), and PCM_TASK_MANAGER::InstallFromFile().

◆ ReadEnvVar()

void PLUGIN_CONTENT_MANAGER::ReadEnvVar ( )

Stores 3rdparty path from environment variables.

Definition at line 202 of file pcm.cpp.

References PATHS::GetDefault3rdPartyPath(), PGM_BASE::GetLocalEnvVariables(), ENV_VAR::GetVersionedEnvVarValue(), m_3rdparty_path, and Pgm().

Referenced by PLUGIN_CONTENT_MANAGER().

◆ RunBackgroundUpdate()

◆ SaveInstalledPackages()

void PLUGIN_CONTENT_MANAGER::SaveInstalledPackages ( )

Saves metadata of installed packages to disk.

Path is <user settings>/installed_packages.json

Definition at line 888 of file pcm.cpp.

References PATHS::GetUserSettingsPath(), and m_installed.

◆ SetDialogWindow()

void PLUGIN_CONTENT_MANAGER::SetDialogWindow ( wxWindow *  aDialog)
inline

Set the Dialog Window.

PCM can effectively run in "silent" mode with a background thread that reports to kicad manager window status bar. Setting valid window pointer here will switch it to GUI mode with WX_PROGRESS_DIALOG popup for downloads.

Parameters
aDialogparent dialog for progress window

Definition at line 329 of file pcm.h.

References m_dialog.

◆ SetPinned()

void PLUGIN_CONTENT_MANAGER::SetPinned ( const wxString &  aPackageId,
const bool  aPinned 
)

Set the pinned status of a package.

no-op for not installed packages

Parameters
aPackageIdpackage id
aPinnedpinned status

Definition at line 953 of file pcm.cpp.

References m_installed.

◆ SetRepositoryList()

void PLUGIN_CONTENT_MANAGER::SetRepositoryList ( const STRING_PAIR_LIST aRepositories)

Set list of repositories.

Discards cache of repositories that were previously cached but are not on the new list of repositories.

Parameters
aRepositorieslist of <URL, name> pairs of repositories

Definition at line 722 of file pcm.cpp.

References DiscardRepositoryCache(), m_repository_cache, and m_repository_list.

◆ StopBackgroundUpdate()

void PLUGIN_CONTENT_MANAGER::StopBackgroundUpdate ( )

Interrupts and joins() the update thread.

Definition at line 1185 of file pcm.cpp.

References m_updateBackgroundJob, and m_updateThread.

Referenced by ~PLUGIN_CONTENT_MANAGER().

◆ updateInstalledPackagesMetadata()

void PLUGIN_CONTENT_MANAGER::updateInstalledPackagesMetadata ( const wxString &  aRepositoryId)
private

Updates metadata of installed packages from freshly fetched repo.

This completely replaces all fields including description. Only exception is versions field, if currently installed version is missing from the repo metadata it is manually added back in to correctly display in the installed packages.

Parameters
aRepositoryIdReturns current UTC timestamp

Definition at line 565 of file pcm.cpp.

References getCachedRepository(), PCM_PACKAGE::identifier, m_installed, PCM_INSTALLATION_ENTRY::package, PCM_REPOSITORY::package_list, PCM_REPOSITORY::package_map, PCM_INSTALLATION_ENTRY::repository_id, tracePcm, and PCM_PACKAGE::versions.

Referenced by CacheRepository().

◆ ValidateJson()

void PLUGIN_CONTENT_MANAGER::ValidateJson ( const nlohmann::json &  aJson,
const nlohmann::json_uri &  aUri = nlohmann::json_uri( "#" ) 
) const

Validates json against a specific definition in the PCM schema.

Parameters
aJsonJSON object to validate
aUriJSON URI of a definition to validate against, default is root
Exceptions
std::invalid_argumenton validation failure

Definition at line 313 of file pcm.cpp.

References m_schema_validator.

Referenced by fetchPackages(), and FetchRepository().

◆ VerifyHash()

bool PLUGIN_CONTENT_MANAGER::VerifyHash ( std::istream &  aStream,
const wxString &  aHash 
) const

Verifies SHA256 hash of a binary stream.

Parameters
aStreaminput stream
aHashsha256 lowercase hex string
Returns
true if hash matches

Definition at line 370 of file pcm.cpp.

Referenced by CacheRepository(), and fetchPackages().

Member Data Documentation

◆ DEFAULT_DOWNLOAD_MEM_LIMIT

constexpr size_t PLUGIN_CONTENT_MANAGER::DEFAULT_DOWNLOAD_MEM_LIMIT = 10 * 1024 * 1024
staticconstexprprivate

< Default download limit of 10 Mb to not use too much memory

Definition at line 358 of file pcm.h.

◆ m_3rdparty_path

wxString PLUGIN_CONTENT_MANAGER::m_3rdparty_path
private

◆ m_availableUpdateCallback

std::function<void( int )> PLUGIN_CONTENT_MANAGER::m_availableUpdateCallback
private

Definition at line 404 of file pcm.h.

Referenced by RunBackgroundUpdate().

◆ m_cache_path

wxString PLUGIN_CONTENT_MANAGER::m_cache_path
private

Definition at line 398 of file pcm.h.

◆ m_dialog

wxWindow* PLUGIN_CONTENT_MANAGER::m_dialog
private

◆ m_installed

◆ m_kicad_version

const std::tuple< int, int, int > PLUGIN_CONTENT_MANAGER::m_kicad_version
staticprivate
Initial value:
=
const std::tuple< int, int, int > & GetMajorMinorPatchTuple()
Get the build version numbers as a tuple.

Definition at line 403 of file pcm.h.

Referenced by PreparePackage().

◆ m_repository_cache

std::unordered_map<wxString, PCM_REPOSITORY> PLUGIN_CONTENT_MANAGER::m_repository_cache
private

◆ m_repository_list

STRING_TUPLE_LIST PLUGIN_CONTENT_MANAGER::m_repository_list
private

Definition at line 400 of file pcm.h.

Referenced by CacheRepository(), GetRepositoryList(), RunBackgroundUpdate(), and SetRepositoryList().

◆ m_schema_validator

nlohmann::json_schema::json_validator PLUGIN_CONTENT_MANAGER::m_schema_validator
private

Definition at line 396 of file pcm.h.

Referenced by PLUGIN_CONTENT_MANAGER(), and ValidateJson().

◆ m_updateBackgroundJob

std::shared_ptr<BACKGROUND_JOB> PLUGIN_CONTENT_MANAGER::m_updateBackgroundJob
private

Definition at line 407 of file pcm.h.

Referenced by CacheRepository(), RunBackgroundUpdate(), and StopBackgroundUpdate().

◆ m_updateThread

std::thread PLUGIN_CONTENT_MANAGER::m_updateThread
private

Definition at line 405 of file pcm.h.

Referenced by RunBackgroundUpdate(), and StopBackgroundUpdate().


The documentation for this class was generated from the following files: