X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fpackage%2FPackage.hxx;h=840a22cd66d2458f47fa1c4630e1e5eec2a4403e;hb=cb6406361061578db779ada90624374f325bfbb9;hp=416384d84e41a0cb1dbd1ec919f3fa7a26a1ce58;hpb=a53071249171facbbfd0a1840155248f2175dc3c;p=simgear.git diff --git a/simgear/package/Package.hxx b/simgear/package/Package.hxx index 416384d8..840a22cd 100644 --- a/simgear/package/Package.hxx +++ b/simgear/package/Package.hxx @@ -1,3 +1,20 @@ +// Copyright (C) 2013 James Turner - zakalawe@mac.com +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// + #ifndef SG_PACKAGE_PACKAGE_HXX #define SG_PACKAGE_PACKAGE_HXX @@ -7,6 +24,10 @@ #include #include +#include +#include +#include + typedef std::set string_set; namespace simgear @@ -18,46 +39,136 @@ namespace pkg // forward decls class Install; class Catalog; +class Package; + +typedef SGSharedPtr PackageRef; +typedef SGSharedPtr CatalogRef; +typedef SGSharedPtr InstallRef; -class Package +typedef std::vector PackageList; + + 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 + */ + std::string description() const; + /** + * access the raw property data in the package + */ + SGPropertyNode* properties() const; + + /** + * hex-encoded MD5 sum of the download files + */ std::string md5() const; 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 + */ string_list downloadUrls() const; + + 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; }; -typedef std::vector PackageList; + } // of namespace pkg