]> git.mxchange.org Git - simgear.git/blobdiff - simgear/package/Root.hxx
Tweak HTTP code to always sleep.
[simgear.git] / simgear / package / Root.hxx
index 576b23c7d29777936cb9bbdc28d806609c87b51b..176651091e98429e44f5777b886f16266653539c 100644 (file)
@@ -1,12 +1,25 @@
-
+// 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_ROOT_HXX
 #define SG_PACKAGE_ROOT_HXX
 
 #include <vector>
-#include <map>
-#include <deque>
-#include <set>
+#include <memory> // for auto_ptr
 
 #include <simgear/misc/sg_path.hxx>
 #include <simgear/package/Delegate.hxx>
@@ -16,7 +29,10 @@ class SGPropertyNode;
 namespace simgear
 {
     
-namespace HTTP { class Client; }
+namespace HTTP {
+    class Client;
+    class Request;
+}
     
 namespace pkg
 {
@@ -29,16 +45,13 @@ class Install;
 typedef std::vector<Package*> PackageList;
 typedef std::vector<Catalog*> CatalogList;
 
-typedef std::map<std::string, Catalog*> CatalogDict;
-
 class Root
 {
 public:
-    Root(const SGPath& aPath);
+    Root(const SGPath& aPath, const std::string& aVersion);
     virtual ~Root();
     
-    SGPath path() const
-        { return m_path; }
+    SGPath path() const;
     
     void setLocale(const std::string& aLocale);
         
@@ -48,12 +61,24 @@ public:
     
     CatalogList catalogs() const;
         
-    void setMaxAgeSeconds(int seconds);
-
+    void setMaxAgeSeconds(unsigned int seconds);
+    unsigned int maxAgeSeconds() const;
+    
     void setHTTPClient(HTTP::Client* aHTTP);
 
-    HTTP::Client* getHTTPClient() const;
-
+    /**
+     * Submit an HTTP request. The Root may delay or queue requests if it needs
+     * too, for example during startup when the HTTP engine may not have been
+     * set yet.
+     */
+    void makeHTTPRequest(HTTP::Request* req);
+    
+    /**
+     * the version string of the root. Catalogs must match this version,
+     * or they will be ignored / rejected.
+     */
+    std::string catalogVersion() const;
+    
     /**
      * refresh catalogs which are more than the maximum age (24 hours by default)
      * set force to true, to download all catalogs regardless of age.
@@ -83,7 +108,7 @@ private:
     
 
     void catalogRefreshBegin(Catalog* aCat);
-    void catalogRefreshComplete(Catalog* aCat, bool aSuccess);
+    void catalogRefreshComplete(Catalog* aCat, Delegate::FailureCode aReason);
         
     void startNext(Install* aCurrent);
     
@@ -91,17 +116,10 @@ private:
     void installProgress(Install* aInstall, unsigned int aBytes, unsigned int aTotal);
     void finishInstall(Install* aInstall);    
     void failedInstall(Install* aInstall, Delegate::FailureCode aReason);
-    
-    SGPath m_path;
-    std::string m_locale;
-    HTTP::Client* m_http;
-    CatalogDict m_catalogs;
-    unsigned int m_maxAgeSeconds;
-    Delegate* m_delegate;
-    
-    std::set<Catalog*> m_refreshing;
-    std::deque<Install*> m_updateDeque;
-};  
+
+    class RootPrivate;
+    std::auto_ptr<RootPrivate> d;
+};
     
 } // of namespace pkg