libzypp  16.22.5
MediaHandler.h
Go to the documentation of this file.
1 
2 /*---------------------------------------------------------------------\
3 | ____ _ __ __ ___ |
4 | |__ / \ / / . \ . \ |
5 | / / \ V /| _/ _/ |
6 | / /__ | | | | | | |
7 | /_____||_| |_| |_| |
8 | |
9 \---------------------------------------------------------------------*/
13 #ifndef ZYPP_MEDIA_MEDIAHANDLERL_H
14 #define ZYPP_MEDIA_MEDIAHANDLERL_H
15 
16 #include <iosfwd>
17 #include <string>
18 #include <list>
19 
20 #include "zypp/Pathname.h"
21 #include "zypp/PathInfo.h"
22 #include "zypp/base/PtrTypes.h"
23 
24 #include "zypp/Url.h"
25 
26 #include "zypp/media/MediaSource.h"
28 #include "zypp/APIConfig.h"
29 
30 namespace zypp {
31  namespace media {
32 
33 
35 //
36 // CLASS NAME : MediaHandler
45 class MediaHandler {
46  friend std::ostream & operator<<( std::ostream & str, const MediaHandler & obj );
47 
48  public:
49  typedef shared_ptr<MediaHandler> Ptr;
50  typedef shared_ptr<const MediaHandler> constPtr;
51 
52  static bool setAttachPrefix(const Pathname &attach_prefix);
53 
54  static std::string getRealPath(const std::string &path);
55  static Pathname getRealPath(const Pathname &path);
56 
57  private:
61  static Pathname _attachPrefix;
62 
66  mutable
68 
74 
86 
92  Pathname _relativeRoot;
93 
99 
101  mutable time_t _attach_mtime;
102 
104  mutable Pathname _deltafile;
105 
106  protected:
110  const Url _url;
111 
116 
124  friend class MediaAccess;
125 
132  bool dependsOnParent(MediaAccessId parentId,
133  bool exactIdMatch);
134  bool dependsOnParent();
135 
141  void resetParentId();
142 
146  Pathname attachPoint() const;
147 
153  void setAttachPoint(const Pathname &path, bool temp);
154 
159  void setAttachPoint(const AttachPointRef &ref);
160 
165 
171  void attachPointHint(const Pathname &path, bool temp);
172 
180  Pathname createAttachPoint() const;
187  Pathname createAttachPoint(const Pathname &attach_root) const;
188 
193  void removeAttachPoint();
194 
201  virtual bool checkAttachPoint(const Pathname &apoint) const;
202 
211  static bool checkAttachPoint(const Pathname &apoint,
212  bool empty_dir,
213  bool writeable);
214 
223  bool isUseableAttachPoint(const Pathname &path,
224  bool mtab=true) const;
225 
230  std::string mediaSourceName() const
231  {
232  return _mediaSource ? _mediaSource->name : "";
233  }
234 
239  void setMediaSource(const MediaSourceRef &ref);
240 
246  findAttachedMedia(const MediaSourceRef &media) const;
247 
260 
265  bool isSharedMedia() const;
266 
275  bool checkAttached(bool matchMountFs) const;
276 
285  void forceRelaseAllMedia(bool matchMountFs);
286  void forceRelaseAllMedia(const MediaSourceRef &ref,
287  bool matchMountFs);
288 
289  protected:
290 
292  //
293  // Real action interface to be overloaded by concrete handler.
294  //
296 
309  virtual void attachTo(bool next = false) = 0;
310 
326  virtual void disconnectFrom() { return; }
327 
340  virtual void releaseFrom( const std::string & ejectDev = "" ) = 0;
341 
348  virtual void forceEject( const std::string & device ) {}
349 
361  virtual void getFile( const Pathname & filename, const ByteCount &expectedFileSize_r ) const;
362 
374  virtual void getFileCopy( const Pathname & srcFilename, const Pathname & targetFilename, const ByteCount &expectedFileSize_r ) const;
375 
376 
392  virtual void getDir( const Pathname & dirname, bool recurse_r ) const = 0;
393 
409  virtual void getDirInfo( std::list<std::string> & retlist,
410  const Pathname & dirname, bool dots = true ) const = 0;
411 
423  virtual void getDirInfo( filesystem::DirContent & retlist,
424  const Pathname & dirname, bool dots = true ) const = 0;
425 
434  virtual bool getDoesFileExist( const Pathname & filename ) const = 0;
435 
436  protected:
437 
446  void getDirectoryYast( std::list<std::string> & retlist,
447  const Pathname & dirname, bool dots = true ) const;
448 
458  const Pathname & dirname, bool dots = true ) const;
459 
460  public:
461 
473  MediaHandler ( const Url& url_r,
474  const Pathname & attach_point_r,
475  const Pathname & urlpath_below_attachpoint_r,
476  const bool does_download_r );
477 
482  virtual ~MediaHandler();
483 
484  public:
485 
486 
488  //
489  // MediaAccess interface. Does common checks and logging.
490  // Invokes real action if necessary.
491  //
493 
497  bool downloads() const { return _does_download; }
498 
502  std::string protocol() const { return _url.getScheme(); }
503 
507  Url url() const { return _url; }
508 
519  void attach(bool next);
520 
524  virtual bool isAttached() const { return _mediaSource != nullptr; }
525 
534  Pathname localRoot() const;
535 
541  Pathname localPath( const Pathname & pathname ) const;
542 
556  void disconnect();
557 
564  void release( const std::string & ejectDev = "" );
565 
574  void provideFile( Pathname filename, const ByteCount &expectedFileSize_r ) const;
575 
587  void provideFileCopy( Pathname srcFilename, Pathname targetFilename, const ByteCount &expectedFileSize_r ) const;
588 
598  void provideDir( Pathname dirname ) const;
599 
609  void provideDirTree( Pathname dirname ) const;
610 
618  void releaseFile( const Pathname & filename ) const { return releasePath( filename ); }
619 
627  void releaseDir( const Pathname & dirname ) const { return releasePath( dirname ); }
628 
641  void releasePath( Pathname pathname ) const;
642 
643  /*
644  * set a deltafile to be used in the next download
645  */
646  void setDeltafile( const Pathname &filename = Pathname()) const;
647 
648  /*
649  * return the deltafile set with setDeltafile()
650  */
651  Pathname deltafile () const;
652 
653  public:
654 
668  void dirInfo( std::list<std::string> & retlist,
669  const Pathname & dirname, bool dots = true ) const;
670 
683  void dirInfo( filesystem::DirContent & retlist,
684  const Pathname & dirname, bool dots = true ) const;
685 
694  bool doesFileExist( const Pathname & filename ) const;
695 
699  virtual bool hasMoreDevices();
700 
709  virtual void
710  getDetectedDevices(std::vector<std::string> & devices,
711  unsigned int & index) const;
712 };
713 
715 
716  } // namespace media
717 } // namespace zypp
718 
719 
720 #endif // ZYPP_MEDIA_MEDIAHANDLERL_H
721 
722 
Attach point of a media source.
Definition: MediaSource.h:105
void resetParentId()
Called in case, where the media manager takes over the destruction of the parent id (e...
bool isSharedMedia() const
Returns a hint if the media is shared or not.
virtual void getDir(const Pathname &dirname, bool recurse_r) const =0
Call concrete handler to provide directory content (not recursive!) below attach point.
AttachPoint _attachPointHint
The user provided attach preferred point.
Definition: MediaHandler.h:85
Handle access to a medium.
Definition: MediaAccess.h:50
Store and operate with byte count.
Definition: ByteCount.h:30
Pathname _relativeRoot
The relative root directory of the data on the media.
Definition: MediaHandler.h:92
bool downloads() const
Hint if files are downloaded or not.
Definition: MediaHandler.h:497
static std::string getRealPath(const std::string &path)
bool doesFileExist(const Pathname &filename) const
check if a file exists
virtual void getFile(const Pathname &filename, const ByteCount &expectedFileSize_r) const
Call concrete handler to provide file below attach point.
static Pathname _attachPrefix
User defined default attach point prefix.
Definition: MediaHandler.h:61
void setAttachPoint(const Pathname &path, bool temp)
Set a new attach point.
virtual void disconnectFrom()
Call concrete handler to disconnect media.
Definition: MediaHandler.h:326
Pathname createAttachPoint() const
Try to create a default / temporary attach point.
Pathname _deltafile
file usable for delta downloads
Definition: MediaHandler.h:104
void provideDirTree(Pathname dirname) const
Use concrete handler to provide directory tree denoted by path below 'localRoot' (recursive!!).
virtual bool checkAttachPoint(const Pathname &apoint) const
Verify if the specified directory as attach point (root) as requires by the particular media handler ...
unsigned int MediaAccessId
Media manager access Id type.
Definition: MediaSource.h:29
virtual void attachTo(bool next=false)=0
Call concrete handler to attach the media.
void releaseDir(const Pathname &dirname) const
Remove directory tree below localRoot IFF handler downloads files to the local filesystem.
Definition: MediaHandler.h:627
void dirInfo(std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const
Return content of directory on media via retlist.
Pathname deltafile() const
virtual void getFileCopy(const Pathname &srcFilename, const Pathname &targetFilename, const ByteCount &expectedFileSize_r) const
Call concrete handler to provide a file under a different place in the file system (usually not under...
MediaSourceRef _mediaSource
The attached media source description reference.
Definition: MediaHandler.h:67
virtual void releaseFrom(const std::string &ejectDev="")=0
Call concrete handler to release the media.
AttachedMedia findAttachedMedia(const MediaSourceRef &media) const
Ask the media manager if specified media source is already attached.
AttachedMedia attachedMedia() const
Returns the attached media.
Abstract base class for 'physical' MediaHandler like MediaCD, etc.
Definition: MediaHandler.h:45
A simple structure containing references to a media source and its attach point.
Definition: MediaSource.h:133
const Url _url
Url to handle.
Definition: MediaHandler.h:110
void setMediaSource(const MediaSourceRef &ref)
Set new media source reference.
void provideFile(Pathname filename, const ByteCount &expectedFileSize_r) const
Use concrete handler to provide file denoted by path below 'localRoot'.
void disconnect()
Use concrete handler to isconnect media.
void attach(bool next)
Use concrete handler to attach the media.
Provides API related macros.
virtual ~MediaHandler()
Contolling MediaAccess takes care, that attached media is released prior to deleting this...
static bool setAttachPrefix(const Pathname &attach_prefix)
void setDeltafile(const Pathname &filename=Pathname()) const
void releasePath(Pathname pathname) const
Remove pathname below localRoot IFF handler downloads files to the local filesystem.
std::list< DirEntry > DirContent
Returned by readdir.
Definition: PathInfo.h:547
virtual bool hasMoreDevices()
Check if the media has one more device available for attach(true).
Pathname localPath(const Pathname &pathname) const
Files provided will be available at 'localPath(filename)'.
bool isUseableAttachPoint(const Pathname &path, bool mtab=true) const
Ask media manager, if the specified path is already used as attach point or if there are another atta...
virtual bool isAttached() const
True if media is attached.
Definition: MediaHandler.h:524
void getDirectoryYast(std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const
Retrieve and if available scan dirname/directory.yast.
void removeAttachPoint()
Remove unused attach point.
virtual void forceEject(const std::string &device)
Call concrete handler to physically eject the media (i.e.
Definition: MediaHandler.h:348
AttachPoint attachPointHint() const
Get the actual attach point hint.
void forceRelaseAllMedia(bool matchMountFs)
Call to this function will try to release all media matching the currenlty attached media source...
virtual void getDirInfo(std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const =0
Call concrete handler to provide a content list of directory on media via retlist.
virtual bool getDoesFileExist(const Pathname &filename) const =0
check if a file exists
Pathname attachPoint() const
Return the currently used attach point.
MediaAccessId _parentId
Access Id of media handler we depend on.
Definition: MediaHandler.h:115
AttachPointRef _attachPoint
This is where the media will be actually attached ("mounted").
Definition: MediaHandler.h:73
time_t _attach_mtime
timestamp of the the last attach verification
Definition: MediaHandler.h:101
std::string protocol() const
Protocol hint for MediaAccess.
Definition: MediaHandler.h:502
Pathname localRoot() const
Return the local directory that corresponds to medias url, no matter if media isAttached or not...
shared_ptr< MediaHandler > Ptr
Definition: MediaHandler.h:49
bool checkAttached(bool matchMountFs) const
Check actual mediaSource attachment against the current mount table of the system.
MediaHandler(const Url &url_r, const Pathname &attach_point_r, const Pathname &urlpath_below_attachpoint_r, const bool does_download_r)
If the concrete media handler provides a nonempty attach_point, it must be an existing directory...
Definition: MediaHandler.cc:55
std::string getScheme() const
Returns the scheme name of the URL.
Definition: Url.cc:527
void releaseFile(const Pathname &filename) const
Remove filename below localRoot IFF handler downloads files to the local filesystem.
Definition: MediaHandler.h:618
void release(const std::string &ejectDev="")
Use concrete handler to release the media.
void provideDir(Pathname dirname) const
Use concrete handler to provide directory denoted by path below 'localRoot' (not recursive!).
friend std::ostream & operator<<(std::ostream &str, const MediaHandler &obj)
virtual void getDetectedDevices(std::vector< std::string > &devices, unsigned int &index) const
Fill in a vector of detected ejectable devices and the index of the currently attached device within ...
Url url() const
Url used.
Definition: MediaHandler.h:507
bool _does_download
True if concrete handler downloads files to the local filesystem.
Definition: MediaHandler.h:98
shared_ptr< const MediaHandler > constPtr
Definition: MediaHandler.h:50
void provideFileCopy(Pathname srcFilename, Pathname targetFilename, const ByteCount &expectedFileSize_r) const
Call concrete handler to provide a copy of a file under a different place in the file system (usually...
Url manipulation class.
Definition: Url.h:87
std::string mediaSourceName() const
Get the media source name or an empty string.
Definition: MediaHandler.h:230