X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fpackage%2FPackage.hxx;h=840a22cd66d2458f47fa1c4630e1e5eec2a4403e;hb=cb6406361061578db779ada90624374f325bfbb9;hp=fe0894e13732c2af2270fbd75d8a6468c1e34ed4;hpb=71e9548c20f8008ba3d1a9b06ad0acf761775922;p=simgear.git diff --git a/simgear/package/Package.hxx b/simgear/package/Package.hxx index fe0894e1..840a22cd 100644 --- a/simgear/package/Package.hxx +++ b/simgear/package/Package.hxx @@ -24,6 +24,10 @@ #include #include +#include +#include +#include + typedef std::set string_set; namespace simgear @@ -36,21 +40,60 @@ namespace pkg class Install; class Catalog; class Package; + +typedef SGSharedPtr PackageRef; +typedef SGSharedPtr CatalogRef; +typedef SGSharedPtr InstallRef; -typedef std::vector PackageList; +typedef std::vector PackageList; -class Package + class Package : public SGReferenced { public: + + typedef boost::function InstallCallback; + /** * get or create an install for the package */ - Install* install(); - + InstallRef install(); + + 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 */ @@ -69,12 +112,16 @@ public: std::string getLocalisedProp(const std::string& aName) const; unsigned int revision() const; - - Catalog* catalog() 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 */ @@ -82,24 +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, Catalog* aCatalog); + 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; - Catalog* m_catalog; + CatalogRef m_catalog; + + mutable function_list _install_cb; };