- applied Jiri's patch for MediaSet use
authorStanislav Visnovsky <visnov@suse.cz>
Fri, 10 Feb 2006 10:22:20 +0000 (10:22 +0000)
committerStanislav Visnovsky <visnov@suse.cz>
Fri, 10 Feb 2006 10:22:20 +0000 (10:22 +0000)
- adapted Source

libzypp compiles now

zypp/Source.cc
zypp/Source.h
zypp/source/MediaSet.cc
zypp/source/SourceImpl.cc
zypp/source/SourceImpl.h
zypp/source/susetags/SuseTagsImpl.cc
zypp/source/yum/YUMSourceImpl.cc

index 5f84e71..ab46f01 100644 (file)
@@ -120,6 +120,9 @@ namespace zypp
   void Source_Ref::redirect(unsigned media_nr, const Url & new_url)
   { _pimpl->redirect(media_nr, new_url); }
   
+  media::MediaVerifierRef Source_Ref::verifier(unsigned media_nr)
+  { _pimpl->verifier(media_nr); }
+  
   /******************************************************************
    **
    **  FUNCTION NAME : operator<<
index b3c5d07..8562d6e 100644 (file)
@@ -115,6 +115,11 @@ namespace zypp
      */
     void redirect(unsigned media_nr, const Url & new_url);
 
+    /**
+     * Provide a media verifier suitable for the given media number
+     */
+    media::MediaVerifierRef verifier(unsigned media_nr);
+
     /** Conversion to bool to allow pointer style tests
      *  for nonNULL \ref source impl.
      * \todo fix by providing a safebool basecalss, doing the 'nasty'
index ccad48b..061f7ef 100644 (file)
@@ -29,7 +29,6 @@ namespace zypp
 
     IMPL_PTR_TYPE(MediaSet);
 
-    media::MediaManager media_mgr;
     MediaSet::MediaSet(const Source_Ref & source_r)
     {
       _source = source_r;
@@ -47,7 +46,9 @@ namespace zypp
 
     media::MediaAccessId MediaSet::getMediaAccessId (media::MediaNr medianr)
     {
-      if (medias.find(medianr) != medias.end())
+     media::MediaManager media_mgr;
+
+     if (medias.find(medianr) != medias.end())
       {
        media::MediaAccessId id = medias[medianr];
        if (! media_mgr.isAttached(id))
index 78450b1..c35c6f3 100644 (file)
@@ -54,7 +54,9 @@ namespace zypp
                                   const std::string & alias_r,
                                   const Pathname cache_dir_r )
     {
-      _media     = media_r;
+      _media_set = new MediaSet(selfSourceRef());
+      _url = media_mgr.url(media_r);
+      _media_set->redirect(1, media_r);
       _path      = path_r;
       _alias     = alias_r;
       _cache_dir = cache_dir_r;
@@ -107,9 +109,11 @@ namespace zypp
 
       SourceFactory source_factory;
 
+      media::MediaAccessId _media;
       do {
         try {
-         media_mgr.provideFile (_media, media_nr, file_r, cached, checkonly);
+         _media = _media_set->getMediaAccessId(media_nr); // in case of redirect
+         media_mgr.provideFile (_media, file_r, cached, checkonly);
          break;
         }
        catch ( Exception & excp )
@@ -145,16 +149,19 @@ namespace zypp
                                          const unsigned media_nr,
                                          const bool recursive)
     {
+      media::MediaAccessId _media = _media_set->getMediaAccessId(media_nr);
       if (recursive)
-       media_mgr.provideDirTree(_media, media_nr, path_r);
+       media_mgr.provideDirTree(_media, path_r);
       else
-       media_mgr.provideDir(_media, media_nr, path_r);
+       media_mgr.provideDir(_media, path_r);
       return media_mgr.localPath(_media, path_r);
     }
 
     void SourceImpl::changeMedia(const media::MediaId & media_r, const Pathname & path_r)
     {
-      _media = media_r;
+      _url = media_mgr.url(media_r);
+      _media_set->reset();
+      _media_set->redirect(1, media_r);
       _path = path_r;
     }
 
@@ -166,8 +173,12 @@ namespace zypp
 
     void SourceImpl::redirect(unsigned media_nr, const Url & new_url)
     {
-#warning TODO implement URL redirect
+      media::MediaAccessId id = media_mgr.open(new_url);
+      _media_set->redirect(media_nr, id);
     }
+
+    media::MediaVerifierRef SourceImpl::verifier(unsigned media_nr)
+    { return media::MediaVerifierRef(new media::NoVerifier()); }
     
     /////////////////////////////////////////////////////////////////
     // attribute accessors
@@ -191,7 +202,7 @@ namespace zypp
     { _priority_unsubscribed = p; }
 
     Url SourceImpl::url (void) const
-    { return media_mgr.url(_media); }
+    { return _url; }
 
     const Pathname & SourceImpl::path (void) const
     { return _path; }
index 3674f75..c6ffc2c 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "zypp/Pathname.h"
 #include "zypp/media/MediaManager.h"
+#include "zypp/source/MediaSet.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -137,6 +138,10 @@ namespace zypp
       virtual void setZmdDescription (const std::string desc_r);
 
       virtual void redirect(unsigned media_nr, const Url & new_url);
+      /**
+       * Get media verifier for the specified media
+       */
+      virtual media::MediaVerifierRef verifier(unsigned media_nr);
 
     protected:
       /** Provide Source_Ref back to \c this. */
@@ -146,8 +151,8 @@ namespace zypp
     protected:
       /** All resolvables provided by this source. */
       ResStore _store;
-      /** Handle to media which contains this source */
-      media::MediaId _media;
+      /** URL of the media */
+      Url _url;
       /** Path to the source on the media */
       Pathname _path;
       /** The source is enabled */
@@ -192,6 +197,9 @@ namespace zypp
       /** Overload to realize stream output. */
       virtual std::ostream & dumpOn( std::ostream & str ) const;
 
+      /** Set of medias of the product */
+      intrusive_ptr<MediaSet> _media_set;
+
     private:
       /** Late initialize the ResStore. */
       virtual void createResolvables(Source_Ref source_r);
index f11881c..c7c3fd8 100644 (file)
@@ -52,6 +52,7 @@ namespace zypp
        std::string media_id;
 
         try {
+         media::MediaAccessId _media = _media_set->getMediaAccessId(1);
          Pathname media_file = Pathname("media.1/media");
          media_mgr.provideFile (_media, media_file);
          media_file = media_mgr.localPath (_media, media_file);
@@ -89,6 +90,7 @@ namespace zypp
           MIL << "Vendor: " << vendor << endl;
           MIL << "Media ID: " << media_id << endl;
 
+         media::MediaAccessId _media = _media_set->getMediaAccessId(1);
           media_mgr.delVerifier(_media);
           media_mgr.addVerifier(_media, media::MediaVerifierRef(
            new SourceImpl::Verifier (vendor, media_id) ));
index ae66aa5..3535d83 100644 (file)
@@ -56,7 +56,7 @@ namespace zypp
          media::MediaManager media_mgr;
 
          MIL << "Adding no media verifier" << endl;
-
+         media::MediaAccessId _media = _media_set->getMediaAccessId(1);
          media_mgr.delVerifier(_media);
          media_mgr.addVerifier(_media, media::MediaVerifierRef(new media::NoVerifier()));
         }