X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fpackage%2FPackage.hxx;h=840a22cd66d2458f47fa1c4630e1e5eec2a4403e;hb=cb6406361061578db779ada90624374f325bfbb9;hp=034d7dd0c3c7deae756438194f86744395fe0b1e;hpb=083b364afd8bc078276793128ed0ddba5eda8b53;p=simgear.git diff --git a/simgear/package/Package.hxx b/simgear/package/Package.hxx index 034d7dd0..840a22cd 100644 --- a/simgear/package/Package.hxx +++ b/simgear/package/Package.hxx @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -49,28 +50,50 @@ typedef std::vector PackageList; class Package : public SGReferenced { public: + + typedef boost::function InstallCallback; + /** * get or create an install for the package */ InstallRef install(); - InstallRef existingInstall() const; + InstallRef + existingInstall(const InstallCallback& cb = InstallCallback()) const; bool isInstalled() const; std::string id() const; + /** + * Variant IDs. Note the primary ID will always be included as + * variants()[0], to simplify enumerating all variants + */ + string_list variants() const; + /** * Fully-qualified ID, including our catalog'd ID */ std::string qualifiedId() const; + + /** + * Fully-qualified ID, including our catalog'd ID + */ + std::string qualifiedVariantId(const unsigned int variantIndex) const; /** * human-readable name - note this is probably not localised, * although this is not ruled out for the future. */ std::string name() const; - + + /** + * Human readable name of a variant + */ + std::string nameForVariant(const std::string& vid) const; + + std::string nameForVariant(const unsigned int vIndex) const; + /** * syntactic sugar to get the localised description */ @@ -89,12 +112,16 @@ public: std::string getLocalisedProp(const std::string& aName) const; unsigned int revision() const; - + + size_t fileSizeBytes() const; + CatalogRef catalog() const { return m_catalog; } bool matches(const SGPropertyNode* aFilter) const; - + + string_set tags() const; + /** * download URLs for the package */ @@ -102,26 +129,43 @@ public: string_list thumbnailUrls() const; + /** + * thumbnail file paths within the package on disk + */ + string_list thumbnails() const; + /** * Packages we depend upon. * If the dependency list cannot be satisifed for some reason, * this will raise an sg_exception. */ PackageList dependencies() const; + + /** + * Name of the package directory on disk. This may or may not be the + * same as the primary ID, depending on the aircraft author + */ + std::string dirName() const; private: SGPath pathOnDisk() const; friend class Catalog; + friend class Root; Package(const SGPropertyNode* aProps, CatalogRef aCatalog); void initWithProps(const SGPropertyNode* aProps); - + + void updateFromProps(const SGPropertyNode* aProps); + std::string getLocalisedString(const SGPropertyNode* aRoot, const char* aName) const; SGPropertyNode_ptr m_props; + std::string m_id; string_set m_tags; CatalogRef m_catalog; + + mutable function_list _install_cb; };