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<<
*/
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'
IMPL_PTR_TYPE(MediaSet);
- media::MediaManager media_mgr;
MediaSet::MediaSet(const Source_Ref & source_r)
{
_source = source_r;
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))
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;
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 )
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;
}
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
{ _priority_unsubscribed = p; }
Url SourceImpl::url (void) const
- { return media_mgr.url(_media); }
+ { return _url; }
const Pathname & SourceImpl::path (void) const
{ return _path; }
#include "zypp/Pathname.h"
#include "zypp/media/MediaManager.h"
+#include "zypp/source/MediaSet.h"
///////////////////////////////////////////////////////////////////
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. */
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 */
/** 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);
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);
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) ));
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()));
}