]> git.mxchange.org Git - simgear.git/blobdiff - simgear/package/Package.hxx
Fix platform check for strerror_r on Mac
[simgear.git] / simgear / package / Package.hxx
index 2c2ce556c350ddf45688852e20b72a4de4a75a16..840a22cd66d2458f47fa1c4630e1e5eec2a4403e 100644 (file)
@@ -24,6 +24,7 @@
 #include <simgear/props/props.hxx>
 #include <simgear/misc/strutils.hxx>
 
+#include <simgear/structure/function_list.hxx>
 #include <simgear/structure/SGReferenced.hxx>
 #include <simgear/structure/SGSharedPtr.hxx>
 
@@ -49,12 +50,16 @@ typedef std::vector<PackageRef> PackageList;
   class Package : public SGReferenced
 {
 public:
+
+    typedef boost::function<void(Package*, Install*)> InstallCallback;
+
     /**
      * get or create an install for the package
      */
     InstallRef install();
 
-    InstallRef existingInstall() const;
+    InstallRef
+    existingInstall(const InstallCallback& cb = InstallCallback()) const;
 
     bool isInstalled() const;
     
@@ -70,6 +75,11 @@ public:
      * 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,
@@ -82,6 +92,8 @@ public:
      */
     std::string nameForVariant(const std::string& vid) const;
 
+    std::string nameForVariant(const unsigned int vIndex) const;
+
     /**
      * syntactic sugar to get the localised description
      */
@@ -107,7 +119,9 @@ public:
         { return m_catalog; }
     
     bool matches(const SGPropertyNode* aFilter) const;
-    
+
+    string_set tags() const;
+
     /**
      * download URLs for the package
      */
@@ -115,16 +129,28 @@ 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);
     
@@ -138,6 +164,8 @@ private:
     std::string m_id;
     string_set m_tags;
     CatalogRef m_catalog;
+
+    mutable function_list<InstallCallback> _install_cb;
 };