libzypp 17.31.23
zypp::MediaSetAccess Class Reference

Media access layer responsible for handling files distributed on a set of media with media change and abort/retry/ingore user callback handling. More...

#include <MediaSetAccess.h>

Inheritance diagram for zypp::MediaSetAccess:

Classes

struct  ReleaseFileGuard
 

Public Types

enum  ProvideFileOption { PROVIDE_DEFAULT = 0x0 , PROVIDE_NON_INTERACTIVE = 0x1 }
 

Public Member Functions

 MediaSetAccess (const Url &url, const Pathname &prefered_attach_point="")
 Creates a callback enabled media access for specified url.
 
 MediaSetAccess (const std::string &label_r, const Url &url, const Pathname &prefered_attach_point="")
 
 ~MediaSetAccess ()
 
void setVerifier (unsigned media_nr, media::MediaVerifierRef verifier)
 Sets a MediaVerifier verifier for given media number.
 
const std::string & label () const
 The label identifing this media set and to be sent in a media change request.
 
void setLabel (const std::string &label_r)
 Set the label identifing this media set and to be sent in a media change request.
 
 ZYPP_DECLARE_FLAGS (ProvideFileOptions, ProvideFileOption)
 
void precacheFiles (const std::vector< OnMediaLocation > &files)
 Tries to fetch the given files and precaches them.
 
Pathname provideFile (const OnMediaLocation &resource, ProvideFileOptions options=PROVIDE_DEFAULT)
 Provides a file from a media location.
 
ZYPP_DEPRECATED Pathname provideFile (const OnMediaLocation &resource, ProvideFileOptions options, const Pathname &deltafile)
 
Pathname provideFile (const Pathname &file, unsigned media_nr=1, ProvideFileOptions options=PROVIDE_DEFAULT)
 Provides file from media media_nr.
 
Pathname provideOptionalFile (const Pathname &file, unsigned media_nr=1)
 Provides an optional file from media media_nr.
 
void releaseFile (const OnMediaLocation &resource)
 Release file from media.
 
void releaseFile (const Pathname &file, unsigned media_nr=1)
 Release file from media.
 
Pathname provideDir (const Pathname &dir, bool recursive, unsigned media_nr=1, ProvideFileOptions options=PROVIDE_DEFAULT)
 Provides direcotry dir from media number media_nr.
 
bool doesFileExist (const Pathname &file, unsigned media_nr=1)
 Checks if a file exists on the specified media, with user callbacks.
 
void dirInfo (filesystem::DirContent &retlist, const Pathname &dirname, bool dots=true, unsigned media_nr=1)
 Fills retlist with directory information.
 
void release ()
 Release all attached media of this set.
 
- Public Member Functions inherited from zypp::base::ReferenceCounted
 ReferenceCounted ()
 Default ctor.
 
 ReferenceCounted (const ReferenceCounted &rhs)
 Copy ctor.
 
virtual ~ReferenceCounted ()
 Dtor.
 
ReferenceCountedoperator= (const ReferenceCounted &)
 Assignment.
 
unsigned refCount () const
 Return reference counter value.
 
void ref () const
 Add a reference.
 
void unref () const
 Release a reference.
 

Static Public Member Functions

static ManagedFile provideFileFromUrl (const Url &file_url, ProvideFileOptions options=PROVIDE_DEFAULT)
 Provides file from url.
 
static ManagedFile provideOptionalFileFromUrl (const Url &file_url)
 Provides an optional file from url.
 
static Url rewriteUrl (const Url &url_r, const media::MediaNr medianr)
 Replaces media number in specified url with given medianr.
 
- Static Public Member Functions inherited from zypp::base::ReferenceCounted
static void add_ref (const ReferenceCounted *ptr_r)
 Called by zypp::intrusive_ptr to add a reference.
 
static void release (const ReferenceCounted *ptr_r)
 Called by zypp::intrusive_ptr to add a reference.
 

Protected Types

typedef function< void(media::MediaAccessId, const OnMediaLocation &)> ProvideOperation
 

Protected Member Functions

Pathname provideFileInternal (const OnMediaLocation &resource, ProvideFileOptions options)
 Provides the file from medium number media_nr and returns its local path.
 
void provide (ProvideOperation op, const OnMediaLocation &resource, ProvideFileOptions options)
 
media::MediaAccessId getMediaAccessId (media::MediaNr medianr)
 
virtual std::ostream & dumpOn (std::ostream &str) const
 Overload to realize std::ostream & operator<<.
 
- Protected Member Functions inherited from zypp::base::ReferenceCounted
virtual std::ostream & dumpOn (std::ostream &str) const
 Overload to realize std::ostream & operator<<.
 
virtual void ref_to (unsigned) const
 Trigger derived classes after refCount was increased.
 
virtual void unref_to (unsigned) const
 Trigger derived classes after refCount was decreased.
 

Private Types

typedef std::map< media::MediaNr, media::MediaAccessIdMediaMap
 
typedef std::map< media::MediaNr, media::MediaVerifierRefVerifierMap
 

Private Attributes

Url _url
 Media or media set URL.
 
Pathname _prefAttachPoint
 Prefered mount point.
 
std::string _label
 
MediaMap _medias
 Mapping between media number and Media Access ID.
 
VerifierMap _verifiers
 Mapping between media number and corespondent verifier.
 

Friends

std::ostream & operator<< (std::ostream &str, const MediaSetAccess &obj)
 

Related Functions

(Note that these are not member functions.)

std::ostream & operator<< (std::ostream &str, const MediaSetAccess &obj)
 Stream output.
 

Detailed Description

Media access layer responsible for handling files distributed on a set of media with media change and abort/retry/ingore user callback handling.

This is provided as a means to handle CD or DVD sets accessible through dir, iso, nfs or other URL schemes other than cd/dvd (see MediaManager for info on different implemented media backends). Currently it handles URLs ending on (case insensitive ) CD#, DVD# or MEDIA#, where # is the number of a particular medium in the set.

Examples:

"iso:/?iso=/path/to/iso/images/openSUSE-10.3-Alpha2plus-DVD-x86_64-DVD1.iso"
"dir:/path/to/cdset/sources/openSUSE-10.3/Alpha2plus/CD1"

MediaSetAccess accesses files on the desired medium by rewriting the original URL, replacing the digit (usually) 1 with requested media number and uses MediaManager to get the files from the new URL.

NOTE: Access to medium #1 always uses the url passed to the CTOR!

Additionaly, each media number can be assinged a media verifier which checks if the media we are trying to access is the desired one. See MediaVerifierBase for more info.

Code example:

Url url("dir:/path/to/cdset/sources/openSUSE-10.3/Alpha2plus/CD1");
MediaSetAccess access(url);
access.setVerifier(1, media1VerifierRef);
access.setVerifier(2, media2VerifierRef);
Pathname file1 = "/some/file/on/media1";
Pathname providedfile1 = access.provideFile(file1, 1);
Pathname file2 = "/some/file/on/media2";
Pathname providedfile2 = access.provideFile(file1, 2);
Media access layer responsible for handling files distributed on a set of media with media change and...
Url manipulation class.
Definition: Url.h:92

Definition at line 80 of file MediaSetAccess.h.

Member Typedef Documentation

◆ ProvideOperation

typedef function<void( media::MediaAccessId, const OnMediaLocation & )> zypp::MediaSetAccess::ProvideOperation
protected

Definition at line 359 of file MediaSetAccess.h.

◆ MediaMap

Definition at line 380 of file MediaSetAccess.h.

◆ VerifierMap

Definition at line 381 of file MediaSetAccess.h.

Member Enumeration Documentation

◆ ProvideFileOption

Enumerator
PROVIDE_DEFAULT 

The user is not asked anything, and the error exception is just propagated.

PROVIDE_NON_INTERACTIVE 

Definition at line 114 of file MediaSetAccess.h.

Constructor & Destructor Documentation

◆ MediaSetAccess() [1/2]

zypp::MediaSetAccess::MediaSetAccess ( const Url url,
const Pathname prefered_attach_point = "" 
)

Creates a callback enabled media access for specified url.

Parameters
url
prefered_attach_pointPrefered attach (mount) point. Use, if you want to mount the media to a specific directory.

Definition at line 36 of file MediaSetAccess.cc.

◆ MediaSetAccess() [2/2]

zypp::MediaSetAccess::MediaSetAccess ( const std::string &  label_r,
const Url url,
const Pathname prefered_attach_point = "" 
)

Definition at line 42 of file MediaSetAccess.cc.

◆ ~MediaSetAccess()

zypp::MediaSetAccess::~MediaSetAccess ( )

Definition at line 50 of file MediaSetAccess.cc.

Member Function Documentation

◆ setVerifier()

void zypp::MediaSetAccess::setVerifier ( unsigned  media_nr,
media::MediaVerifierRef  verifier 
)

Sets a MediaVerifier verifier for given media number.

Definition at line 62 of file MediaSetAccess.cc.

◆ label()

Also taking a ref zypp::MediaSetAccess::label ( ) const
inline

The label identifing this media set and to be sent in a media change request.

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Definition at line 105 of file MediaSetAccess.h.

◆ setLabel()

void zypp::MediaSetAccess::setLabel ( const std::string &  label_r)
inline

Set the label identifing this media set and to be sent in a media change request.

Definition at line 111 of file MediaSetAccess.h.

◆ ZYPP_DECLARE_FLAGS()

zypp::MediaSetAccess::ZYPP_DECLARE_FLAGS ( ProvideFileOptions  ,
ProvideFileOption   
)

◆ precacheFiles()

void zypp::MediaSetAccess::precacheFiles ( const std::vector< OnMediaLocation > &  files)

Tries to fetch the given files and precaches them.

Those files need to be queried using provideFile and can be read from the cache directly. The implementation is not allowed to block but needs to use seperate means to download the files concurrently. A backend can choose to completely ignore this functionaly, the default implementation does nothing.

Parameters
filesList of files that should be precached

Definition at line 238 of file MediaSetAccess.cc.

◆ provideFile() [1/3]

Pathname zypp::MediaSetAccess::provideFile ( const OnMediaLocation resource,
ProvideFileOptions  options = PROVIDE_DEFAULT 
)

Provides a file from a media location.

Parameters
resourcelocation of the file on media
Returns
local pathname of the requested file
Exceptions
MediaExceptionif a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestExceptionif a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.

If the resource is marked as optional, no Exception is thrown and Pathname() is returned

the optional deltafile argument describes a file that can be used for delta download algorithms.

Note
interaction with the user does not ocurr if ProvideFileOptions::NON_INTERACTIVE is set.
OnMediaLocation::optional() hint has no effect on the transfer.
See also
zypp::media::MediaManager::provideFile()

Definition at line 165 of file MediaSetAccess.cc.

◆ provideFile() [2/3]

Pathname zypp::MediaSetAccess::provideFile ( const OnMediaLocation resource,
ProvideFileOptions  options,
const Pathname deltafile 
)
Deprecated:
The deltafile argument is part of the OnMediaLocation now, use the version of provideFile( const OnMediaLocation & resource, ProvideFileOptions options )

Definition at line 172 of file MediaSetAccess.cc.

◆ provideFile() [3/3]

Pathname zypp::MediaSetAccess::provideFile ( const Pathname file,
unsigned  media_nr = 1,
ProvideFileOptions  options = PROVIDE_DEFAULT 
)

Provides file from media media_nr.

Parameters
filepath to the file relative to media URL
media_nrthe media number in the media set
Returns
local pathname of the requested file
Note
interaction with the user does not ocurr if ProvideFileOptions::NON_INTERACTIVE is set.
OnMediaLocation::optional() hint has no effect on the transfer.
Exceptions
MediaExceptionif a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestExceptionif a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.
See also
zypp::media::MediaManager::provideFile()

Definition at line 177 of file MediaSetAccess.cc.

◆ provideOptionalFile()

Pathname zypp::MediaSetAccess::provideOptionalFile ( const Pathname file,
unsigned  media_nr = 1 
)

Provides an optional file from media media_nr.

Like provideFile (NON_INTERACTIVE), but return an empty Pathname rather than throwing a MediaException if the file is not present on the media.

Definition at line 182 of file MediaSetAccess.cc.

◆ provideFileFromUrl()

ManagedFile zypp::MediaSetAccess::provideFileFromUrl ( const Url file_url,
ProvideFileOptions  options = PROVIDE_DEFAULT 
)
static

Provides file from url.

Parameters
absoluteurl to the file
Returns
local pathname of the requested file
Note
interaction with the user does not ocurr if ProvideFileOptions::NON_INTERACTIVE is set.
Exceptions
MediaExceptionif a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestExceptionif a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.
See also
zypp::media::MediaManager::provideFile()

Definition at line 197 of file MediaSetAccess.cc.

◆ provideOptionalFileFromUrl()

ManagedFile zypp::MediaSetAccess::provideOptionalFileFromUrl ( const Url file_url)
static

Provides an optional file from url.

Like provideFileFromUrl( NON_INTERACTIVE ), but return an empty Pathname rather than throwing a MediaException if the file is not present on the media.

Definition at line 217 of file MediaSetAccess.cc.

◆ releaseFile() [1/2]

void zypp::MediaSetAccess::releaseFile ( const OnMediaLocation resource)

Release file from media.

This signal that file is not needed anymore.

Parameters
resourcelocation of the file on media

Definition at line 81 of file MediaSetAccess.cc.

◆ releaseFile() [2/2]

void zypp::MediaSetAccess::releaseFile ( const Pathname file,
unsigned  media_nr = 1 
)

Release file from media.

This signal that file is not needed anymore.

Parameters
filepath to the file relative to media URL
media_nrthe media number in the media set

Definition at line 86 of file MediaSetAccess.cc.

◆ provideDir()

Pathname zypp::MediaSetAccess::provideDir ( const Pathname dir,
bool  recursive,
unsigned  media_nr = 1,
ProvideFileOptions  options = PROVIDE_DEFAULT 
)

Provides direcotry dir from media number media_nr.

Parameters
dirpath to the directory relative to media URL
recursivewhether to provide the whole directory subtree
media_nrthe media number in the media set
Returns
local pathname of the requested directory
Exceptions
MediaExceptionif a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
Todo:
throw SkipRequestException if a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.
See also
zypp::media::MediaManager::provideDir()
zypp::media::MediaManager::provideDirTree()

Definition at line 393 of file MediaSetAccess.cc.

◆ doesFileExist()

bool zypp::MediaSetAccess::doesFileExist ( const Pathname file,
unsigned  media_nr = 1 
)

Checks if a file exists on the specified media, with user callbacks.

Parameters
filefile to check
media_nrMedia number
Exceptions
MediaExceptionif a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestExceptionif a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.
See also
zypp::media::MediaManager::doesFileExist(MediaAccessId,const Pathname&)

Definition at line 230 of file MediaSetAccess.cc.

◆ dirInfo()

void zypp::MediaSetAccess::dirInfo ( filesystem::DirContent retlist,
const Pathname dirname,
bool  dots = true,
unsigned  media_nr = 1 
)

Fills retlist with directory information.

Definition at line 101 of file MediaSetAccess.cc.

◆ release()

void zypp::MediaSetAccess::release ( )

Release all attached media of this set.

Exceptions
MediaNotOpenExceptionfor invalid access IDs.

Definition at line 488 of file MediaSetAccess.cc.

◆ rewriteUrl()

Url zypp::MediaSetAccess::rewriteUrl ( const Url url_r,
const media::MediaNr  medianr 
)
static

Replaces media number in specified url with given medianr.

Media number in the URL is searched for with regex "^(.*(cd|dvd|media))([0-9]+)(\\.iso)$" for iso scheme and with "^(.*(cd|dvd|media))([0-9]+)(/?)$" for other schemes.

For cd and dvd scheme it returns the original URL, as well as for URL which do not match the above regexes.

Parameters
url_roriginal URL
medianrrequested media number
Returns
rewritten URL if applicable, the original URL otherwise

Definition at line 445 of file MediaSetAccess.cc.

◆ provideFileInternal()

Pathname zypp::MediaSetAccess::provideFileInternal ( const OnMediaLocation resource,
ProvideFileOptions  options 
)
protected

Provides the file from medium number media_nr and returns its local path.

Note
The method must not throw if checkonly is true.
Exceptions
MediaExceptioncheckonly is false and a problem occured and user has chosen to abort the operation. The calling code should take care to quit the current operation.
SkipRequestExceptioncheckonly is false and a problem occured and user has chosen to skip the current operation. The calling code should continue with the next one, if possible.

◆ provide()

void zypp::MediaSetAccess::provide ( ProvideOperation  op,
const OnMediaLocation resource,
ProvideFileOptions  options 
)
protected

Definition at line 259 of file MediaSetAccess.cc.

◆ getMediaAccessId()

media::MediaAccessId zypp::MediaSetAccess::getMediaAccessId ( media::MediaNr  medianr)
protected

Definition at line 410 of file MediaSetAccess.cc.

◆ dumpOn()

std::ostream & zypp::MediaSetAccess::dumpOn ( std::ostream &  str) const
protectedvirtual

Overload to realize std::ostream & operator<<.

Reimplemented from zypp::base::ReferenceCounted.

Definition at line 496 of file MediaSetAccess.cc.

Friends And Related Function Documentation

◆ operator<< [1/2]

std::ostream & operator<< ( std::ostream &  str,
const MediaSetAccess obj 
)
friend

◆ operator<<() [2/2]

std::ostream & operator<< ( std::ostream &  str,
const MediaSetAccess obj 
)
related

Stream output.

Definition at line 392 of file MediaSetAccess.h.

Member Data Documentation

◆ _url

Url zypp::MediaSetAccess::_url
private

Media or media set URL.

Definition at line 368 of file MediaSetAccess.h.

◆ _prefAttachPoint

Pathname zypp::MediaSetAccess::_prefAttachPoint
private

Prefered mount point.

See also
MediaManager::open(Url,Pathname)
MediaHandler::_attachPoint

Definition at line 376 of file MediaSetAccess.h.

◆ _label

std::string zypp::MediaSetAccess::_label
private

Definition at line 378 of file MediaSetAccess.h.

◆ _medias

MediaMap zypp::MediaSetAccess::_medias
private

Mapping between media number and Media Access ID.

Definition at line 384 of file MediaSetAccess.h.

◆ _verifiers

VerifierMap zypp::MediaSetAccess::_verifiers
private

Mapping between media number and corespondent verifier.

Definition at line 386 of file MediaSetAccess.h.


The documentation for this class was generated from the following files: