X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fpackage%2FRoot.hxx;h=69ac4804cbfa57d91db16051d2e51b850abfd45c;hb=32181a3956a8e7e1cb4bdb5338a260df7d343534;hp=576b23c7d29777936cb9bbdc28d806609c87b51b;hpb=a53071249171facbbfd0a1840155248f2175dc3c;p=simgear.git diff --git a/simgear/package/Root.hxx b/simgear/package/Root.hxx index 576b23c7..69ac4804 100644 --- a/simgear/package/Root.hxx +++ b/simgear/package/Root.hxx @@ -1,22 +1,41 @@ - +// 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 -#include -#include -#include +#include // for auto_ptr #include #include +#include +#include + class SGPropertyNode; namespace simgear { -namespace HTTP { class Client; } +namespace HTTP { + class Client; + class Request; +} namespace pkg { @@ -25,34 +44,60 @@ namespace pkg class Package; class Catalog; class Install; - -typedef std::vector PackageList; -typedef std::vector CatalogList; - -typedef std::map CatalogDict; - -class Root + +typedef SGSharedPtr PackageRef; +typedef SGSharedPtr CatalogRef; +typedef SGSharedPtr InstallRef; + +typedef std::vector PackageList; +typedef std::vector CatalogList; + +class Root : public SGReferenced { 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); - void setDelegate(Delegate* aDelegate); - + void addDelegate(Delegate* aDelegate); + + void removeDelegate(Delegate* aDelegate); + std::string getLocale() const; 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); + + /** + * Cancel an HTTP request. + */ + void cancelHTTPRequest(HTTP::Request* req, const std::string& reason); + + /** + * The catalog XML/property version in use. This is used to make incomaptible + * changes to the package/catalog syntax + */ + int catalogVersion() const; + + /** + * the version string of the application. Catalogs must match this version, + * or they will be ignored / rejected. + */ + std::string applicationVersion() const; /** * refresh catalogs which are more than the maximum age (24 hours by default) @@ -60,6 +105,11 @@ public: */ void refresh(bool aForce = false); + /** + * + */ + PackageList allPackages() const; + /** * retrieve packages matching a filter. * filter consists of required / minimum values, AND-ed together. @@ -72,37 +122,50 @@ public: */ PackageList packagesNeedingUpdate() const; - Package* getPackageById(const std::string& aId) const; + PackageRef getPackageById(const std::string& aId) const; - Catalog* getCatalogById(const std::string& aId) const; + CatalogRef getCatalogById(const std::string& aId) const; - void scheduleToUpdate(Install* aInstall); + void scheduleToUpdate(InstallRef aInstall); + + /** + * remove a catalog. Will uninstall all packages originating + * from the catalog too. + */ + bool removeCatalogById(const std::string& aId); + + /** + * request thumbnail data from the cache / network + */ + void requestThumbnailData(const std::string& aUrl); + + bool isInstallQueued(InstallRef aInstall) const; private: friend class Install; friend class Catalog; + friend class Package; - - void catalogRefreshBegin(Catalog* aCat); - void catalogRefreshComplete(Catalog* aCat, bool aSuccess); - - void startNext(Install* aCurrent); + InstallRef existingInstallForPackage(PackageRef p) const; - void startInstall(Install* aInstall); - void installProgress(Install* aInstall, unsigned int aBytes, unsigned int aTotal); - void finishInstall(Install* aInstall); - void failedInstall(Install* aInstall, Delegate::FailureCode aReason); + void catalogRefreshStatus(CatalogRef aCat, Delegate::StatusCode aReason); + + void startNext(InstallRef aCurrent); - SGPath m_path; - std::string m_locale; - HTTP::Client* m_http; - CatalogDict m_catalogs; - unsigned int m_maxAgeSeconds; - Delegate* m_delegate; + void startInstall(InstallRef aInstall); + void installProgress(InstallRef aInstall, unsigned int aBytes, unsigned int aTotal); + void finishInstall(InstallRef aInstall, Delegate::StatusCode aReason); + void cancelDownload(InstallRef aInstall); - std::set m_refreshing; - std::deque m_updateDeque; -}; + void registerInstall(InstallRef ins); + void unregisterInstall(InstallRef ins); + class ThumbnailDownloader; + class RootPrivate; + std::auto_ptr d; +}; + +typedef SGSharedPtr RootRef; + } // of namespace pkg } // of namespace simgear