Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / zypp / repo / yum / Downloader.h
index ce2bf12..f34b42b 100644 (file)
 #include "zypp/Fetcher.h"
 #include "zypp/OnMediaLocation.h"
 #include "zypp/MediaSetAccess.h"
-#include "zypp/parser/xml/Reader.h"
+#include "zypp/ProgressData.h"
+#include "zypp/RepoInfo.h"
+#include "zypp/RepoStatus.h"
+#include "zypp/repo/Downloader.h"
 #include "zypp/repo/yum/ResourceType.h"
 
 namespace zypp
@@ -24,38 +27,56 @@ namespace zypp
   {
     namespace yum
     {
-      /**
-      * This class allows to retrieve a YUM repository
-      * to a local directory
+     /**
+      * \short Downloader for YUM (rpm-nmd) repositories
+      * Encapsulates all the knowledge of which files have
+      * to be downloaded to the local disk.
       *
       * \code
-      * Downloader yum(url, path);
-      * yum.download("localdir");
+      * MediaSetAccess media(url);
+      * Downloader yum(path);
+      * yum.download( media, "localdir");
       * \endcode
       */
-      class Downloader
+      class Downloader : public repo::Downloader
       {
-       public:
-       /**
-        * Create the download object for a repository
-        * located in \a url with path \a path
-        */
-        Downloader( const Url &url, const Pathname &path );
-       /**
-        * starts the download to local directory \a dest_dir
-        */
-        void download( const Pathname &dest_dir );
+      public:
+         
+        /**
+         * \short Constructor from the repository information
+         *
+         * The repository information allows more context to be given
+         * to the user when something fails.
+         *
+         * \param info Repository information
+         */
+        Downloader( const RepoInfo &info , const Pathname &delta_dir = Pathname());
+
+        /**
+         * \short Download metadata to a local directory
+         *
+         * \param media Media access to the repository url
+         * \param dest_dir Local destination directory
+         * \param progress progress receiver
+         */
+        void download( MediaSetAccess &media,
+                       const Pathname &dest_dir,
+                       const ProgressData::ReceiverFnc & progress = ProgressData::ReceiverFnc() );
+        
+        /**
+         * \short Status of the remote repository
+         */
+        RepoStatus status( MediaSetAccess &media );
         
        protected:
         bool repomd_Callback( const OnMediaLocation &loc, const ResourceType &dtype );
         bool patches_Callback( const OnMediaLocation &loc, const std::string &id );
        private:
-        Url _url;
-        Pathname _path;
-        Fetcher _fetcher;
         Pathname _dest_dir;
+        Pathname _delta_dir;
         std::list<OnMediaLocation> _patches_files;
-        MediaSetAccess _media;
+        
+        MediaSetAccess *_media_ptr;
       };
 
     } // ns yum