]> git.mxchange.org Git - simgear.git/blobdiff - simgear/package/Package.cxx
Tweak HTTP code to always sleep.
[simgear.git] / simgear / package / Package.cxx
index 1f43d3aebaab52872e23c27200b2a93fb6c76a0b..7e0b1853ba8abf4714966b042a1d791cab0a5e54 100644 (file)
@@ -1,10 +1,28 @@
-
+// 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.
+//
 
 #include <simgear/package/Package.hxx>
 
+#include <cassert>
 #include <boost/foreach.hpp>
 
 #include <simgear/debug/logstream.hxx> 
+#include <simgear/structure/exception.hxx>
+
 #include <simgear/package/Catalog.hxx>
 #include <simgear/package/Install.hxx>
 #include <simgear/package/Root.hxx>
@@ -93,6 +111,30 @@ unsigned int Package::revision() const
 {
     return m_props->getIntValue("revision");
 }
+    
+std::string Package::name() const
+{
+    return m_props->getStringValue("name");
+}
+
+std::string Package::description() const
+{
+    return getLocalisedProp("decription");
+}
+    
+SGPropertyNode* Package::properties() const
+{
+    return m_props.ptr();
+}
+
+string_list Package::thumbnailUrls() const
+{
+    string_list r;
+    BOOST_FOREACH(SGPropertyNode* dl, m_props->getChildren("thumbnail")) {
+        r.push_back(dl->getStringValue());
+    }
+    return r;
+}
 
 string_list Package::downloadUrls() const
 {
@@ -121,6 +163,40 @@ std::string Package::getLocalisedString(const SGPropertyNode* aRoot, const char*
     return aRoot->getStringValue(aName);
 }
 
+PackageList Package::dependencies() const
+{
+    PackageList result;
+    
+    BOOST_FOREACH(SGPropertyNode* dep, m_props->getChildren("depends")) {
+        std::string depName = dep->getStringValue("package");
+        unsigned int rev = dep->getIntValue("revision", 0);
+        
+    // prefer local hangar package if possible, in case someone does something
+    // silly with naming. Of course flightgear's aircraft search doesn't know
+    // about hanagrs, so names still need to be unique.
+        Package* depPkg = m_catalog->getPackageById(depName);
+        if (!depPkg) {   
+            Root* rt = m_catalog->root();
+            depPkg = rt->getPackageById(depName);
+            if (!depPkg) {
+                throw sg_exception("Couldn't satisfy dependency of " + id() + " : " + depName);
+            }
+        }
+        
+        if (depPkg->revision() < rev) {
+            throw sg_range_exception("Couldn't find suitable revision of " + depName);
+        }
+    
+    // forbid recursive dependency graphs, we don't need that level
+    // of complexity for aircraft resources
+        assert(depPkg->dependencies() == PackageList());
+        
+        result.push_back(depPkg);
+    }
+    
+    return result;
+}
+
 } // of namespace pkg
 
 } // of namespace simgear