libzypp  15.3.0
MediaManager.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 #ifndef ZYPP_MEDIA_MEDIAMANAGER_H
13 #define ZYPP_MEDIA_MEDIAMANAGER_H
14 
15 #include "zypp/media/MediaAccess.h"
16 
17 #include "zypp/APIConfig.h"
18 #include "zypp/base/NonCopyable.h"
19 #include "zypp/base/PtrTypes.h"
20 #include "zypp/Pathname.h"
21 #include "zypp/Url.h"
22 
23 #include <list>
24 
25 
27 namespace zypp
28 {
29 
31  namespace media
32  {
33 
34 
37 
38  // OBSOLETE HERE:
40  typedef unsigned int MediaNr;
41 
42 
44  // forward declaration
45  class MountEntry;
46  class MediaManager_Impl;
47 
49  //
50  // CLASS NAME : MediaVerifierBase
51  //
55  class MediaVerifierBase //: private zypp::NonCopyable
56  {
57  public:
59  {}
60 
61  virtual
63  {}
64 
69  virtual std::string
70  info() const;
71 
72  /*
73  ** Check if the specified attached media contains
74  ** the desired media (e.g. SLES10 CD1).
75  */
76  virtual bool
77  isDesiredMedia(const MediaAccessRef &ref) = 0;
78  };
79 
80 
82  //
83  // CLASS NAME : NoVerifier
84  //
89  {
90  public:
92  {}
93 
94  virtual
96  {}
97 
101  virtual std::string
102  info() const;
103 
104  /*
105  ** Don't check if the specified attached media contains
106  ** the desired media number. Always return true.
107  */
108  virtual bool
109  isDesiredMedia(const MediaAccessRef &ref)
110  {
111  (void)ref;
112  return true;
113  }
114  };
115 
116 
118  //
119  // CLASS NAME : MediaVerifierRef
120  //
125 
126 
128  //
129  // CLASS NAME : MediaManager
130  //
472  {
473  public:
485  MediaManager();
486 
491  ~MediaManager();
492 
514  open(const Url &url, const Pathname & preferred_attach_point = "");
515 
520  void
521  close(MediaAccessId accessId);
522 
529  bool
530  isOpen(MediaAccessId accessId) const;
531 
541  std::string
542  protocol(MediaAccessId accessId) const;
543 
549  bool
550  downloads(MediaAccessId accessId) const;
551 
559  Url
560  url(MediaAccessId accessId) const;
561 
562  public:
571  void
572  addVerifier(MediaAccessId accessId,
573  const MediaVerifierRef &verifier);
574 
582  void
583  delVerifier(MediaAccessId accessId);
584 
585  public:
598  bool
599  setAttachPrefix(const Pathname &attach_prefix);
600 
610  void
611  attach(MediaAccessId accessId);
612 
624  void
625  release(MediaAccessId accessId, const std::string & ejectDev = "");
626 
630  void
631  releaseAll();
632 
647  void
648  disconnect(MediaAccessId accessId);
649 
657  bool
658  isAttached(MediaAccessId accessId) const;
659 
668  bool
669  isSharedMedia(MediaAccessId accessId) const;
670 
680  bool
681  isDesiredMedia(MediaAccessId accessId) const;
682 
693  bool
694  isDesiredMedia(MediaAccessId accessId,
695  const MediaVerifierRef &verifier) const;
696 
708  bool
709  isChangeable(MediaAccessId accessId);
710 
723  Pathname
724  localRoot(MediaAccessId accessId) const;
725 
738  Pathname
739  localPath(MediaAccessId accessId, const Pathname & pathname) const;
740 
741  public:
760  void
761  provideFile(MediaAccessId accessId,
762  const Pathname &filename ) const;
763 
767  void
768  provideDir(MediaAccessId accessId,
769  const Pathname &dirname) const;
770 
774  void
775  provideDirTree(MediaAccessId accessId,
776  const Pathname &dirname) const;
777 
781  void
782  releaseFile(MediaAccessId accessId,
783  const Pathname &filename) const;
784 
788  void
789  releaseDir(MediaAccessId accessId,
790  const Pathname &dirname) const;
791 
795  void
796  releasePath(MediaAccessId accessId,
797  const Pathname &pathname) const;
798 
802  void
803  dirInfo(MediaAccessId accessId,
804  std::list<std::string> &retlist,
805  const Pathname &dirname,
806  bool dots = true) const;
807 
811  void
812  dirInfo(MediaAccessId accessId,
813  filesystem::DirContent &retlist,
814  const Pathname &dirname,
815  bool dots = true) const;
816 
820  bool doesFileExist(MediaAccessId accessId,
821  const Pathname & filename ) const;
822 
832  void
834  std::vector<std::string> & devices,
835  unsigned int & index) const;
836 
837  void
838  setDeltafile(MediaAccessId accessId,
839  const Pathname &filename ) const;
840 
841  public:
846  static time_t
848 
853  static std::vector<MountEntry>
854  getMountEntries();
855 
865  bool
866  isUseableAttachPoint(const Pathname &path,
867  bool mtab=true) const;
868 
869  private:
870  friend class MediaHandler;
871 
882  getAttachedMedia(MediaAccessId &accessId) const;
883 
894  findAttachedMedia(const MediaSourceRef &media) const;
895 
904  void
905  forceReleaseShared(const MediaSourceRef &media);
906 
907  private:
912  };
913 
914 
916  } // namespace media
918 
920 } // namespace zypp
922 
923 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
924 
925 /*
926 ** vim: set ts=2 sts=2 sw=2 ai et:
927 */
Dummy default media verifier, which is always happy.
Definition: MediaManager.h:88
void releaseFile(MediaAccessId accessId, const Pathname &filename) const
FIXME: see MediaAccess class.
Url url(MediaAccessId accessId) const
Returns the Media Access Url of the media access id.
void releasePath(MediaAccessId accessId, const Pathname &pathname) const
FIXME: see MediaAccess class.
void provideDir(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
zypp::RW_pointer< MediaVerifierBase > MediaVerifierRef
A shared reference to the MediaVerifier implementation.
Definition: MediaManager.h:124
bool isOpen(MediaAccessId accessId) const
Query if the media access is open / exists.
MediaAccessId MediaId
Definition: MediaManager.h:39
bool isUseableAttachPoint(const Pathname &path, bool mtab=true) const
Check if the specified path is useable as attach point.
void setDeltafile(MediaAccessId accessId, const Pathname &filename) const
Pathname localRoot(MediaAccessId accessId) const
Return the local directory that corresponds to medias url, no matter if media isAttached or not...
bool isDesiredMedia(MediaAccessId accessId) const
Ask the registered verifier if the attached media is the desired one or not.
void dirInfo(MediaAccessId accessId, std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const
FIXME: see MediaAccess class.
Interface to implement a media verifier.
Definition: MediaManager.h:55
bool downloads(MediaAccessId accessId) const
Hint if files are downloaded or not.
void provideFile(MediaAccessId accessId, const Pathname &filename) const
Provide provide file denoted by relative path below of the 'attach point' of the specified media and ...
unsigned int MediaAccessId
Media manager access Id type.
Definition: MediaSource.h:29
bool isChangeable(MediaAccessId accessId)
Simple check, based on media's URL scheme, telling whether the it is possible to physically change th...
bool setAttachPrefix(const Pathname &attach_prefix)
Set or resets the directory name, where the media manager handlers create their temporary attach poin...
void disconnect(MediaAccessId accessId)
Disconnect a remote media.
static zypp::RW_pointer< MediaManager_Impl > m_impl
Static reference to the implementation (singleton).
Definition: MediaManager.h:911
std::string protocol(MediaAccessId accessId) const
Query the protocol name used by the media access handler.
~MediaManager()
Destroys MediaManager envelope instance.
void release(MediaAccessId accessId, const std::string &ejectDev="")
Release the attached media and optionally eject.
bool doesFileExist(MediaAccessId accessId, const Pathname &filename) const
FIXME: see MediaAccess class.
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
Definition: NonCopyable.h:26
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
virtual std::string info() const
Returns the "zypp::media::NoVerifier" string.
AttachedMedia getAttachedMedia(MediaAccessId &accessId) const
Pathname localPath(MediaAccessId accessId, const Pathname &pathname) const
Shortcut for 'localRoot() + pathname', but returns an empty pathname if media is not attached...
Provides API related macros.
bool isSharedMedia(MediaAccessId accessId) const
Returns information if media is on a shared physical device or not.
void getDetectedDevices(MediaAccessId accessId, 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 ...
std::list< DirEntry > DirContent
Returned by readdir.
Definition: PathInfo.h:547
void addVerifier(MediaAccessId accessId, const MediaVerifierRef &verifier)
Add verifier implementation for the specified media id.
virtual bool isDesiredMedia(const MediaAccessRef &ref)=0
AttachedMedia findAttachedMedia(const MediaSourceRef &media) const
void forceReleaseShared(const MediaSourceRef &media)
void attach(MediaAccessId accessId)
Attach the media using the concrete handler (checks all devices).
MediaManager()
Creates a MediaManager envelope instance.
Manages access to the 'physical' media, e.g CDROM drives, Disk volumes, directory trees...
Definition: MediaManager.h:471
MediaVerifierRef verifier
Wrapper for const correct access via Smart pointer types.
Definition: PtrTypes.h:285
A "struct mntent" like mount entry structure, but using std::strings.
Definition: Mount.h:34
virtual bool isDesiredMedia(const MediaAccessRef &ref)
Definition: MediaManager.h:109
void provideDirTree(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
virtual std::string info() const
Returns a string with some info about the verifier.
bool isAttached(MediaAccessId accessId) const
Check if media is attached or not.
void releaseAll()
Release all attached media.
void releaseDir(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:1
MediaAccessId open(const Url &url, const Pathname &preferred_attach_point="")
Opens the media access for specified with the url.
zypp::RW_pointer< MediaAccess > MediaAccessRef
Definition: MediaManager.h:36
static time_t getMountTableMTime()
Get the modification time of the /etc/mtab file.
Url manipulation class.
Definition: Url.h:87
void delVerifier(MediaAccessId accessId)
Remove verifier for specified media id.
unsigned int MediaNr
Definition: MediaManager.h:40
void close(MediaAccessId accessId)
Close the media access with specified id.
static std::vector< MountEntry > getMountEntries()
Get current mount entries from /etc/mtab file.