libzypp  17.14.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  struct 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
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  //
471  {
472  public:
484  MediaManager();
485 
490  ~MediaManager();
491 
513  open(const Url &url, const Pathname & preferred_attach_point = "");
514 
519  void
520  close(MediaAccessId accessId);
521 
528  bool
529  isOpen(MediaAccessId accessId) const;
530 
540  std::string
541  protocol(MediaAccessId accessId) const;
542 
548  bool
549  downloads(MediaAccessId accessId) const;
550 
558  Url
559  url(MediaAccessId accessId) const;
560 
561  public:
570  void
571  addVerifier(MediaAccessId accessId,
572  const MediaVerifierRef &verifier);
573 
581  void
582  delVerifier(MediaAccessId accessId);
583 
584  public:
597  bool
598  setAttachPrefix(const Pathname &attach_prefix);
599 
609  void
610  attach(MediaAccessId accessId);
611 
623  void
624  release(MediaAccessId accessId, const std::string & ejectDev = "");
625 
629  void
630  releaseAll();
631 
646  void
647  disconnect(MediaAccessId accessId);
648 
656  bool
657  isAttached(MediaAccessId accessId) const;
658 
667  bool
668  isSharedMedia(MediaAccessId accessId) const;
669 
679  bool
680  isDesiredMedia(MediaAccessId accessId) const;
681 
692  bool
693  isDesiredMedia(MediaAccessId accessId,
694  const MediaVerifierRef &verifier) const;
695 
707  bool
708  isChangeable(MediaAccessId accessId);
709 
722  Pathname
723  localRoot(MediaAccessId accessId) const;
724 
737  Pathname
738  localPath(MediaAccessId accessId, const Pathname & pathname) const;
739 
740  public:
760  void
761  provideFile(MediaAccessId accessId,
762  const Pathname &filename,
763  const ByteCount &expectedFileSize) const;
764 
765  void
766  provideFile(MediaAccessId accessId,
767  const Pathname &filename ) const;
768 
772  void
773  provideDir(MediaAccessId accessId,
774  const Pathname &dirname) const;
775 
779  void
780  provideDirTree(MediaAccessId accessId,
781  const Pathname &dirname) const;
782 
786  void
787  releaseFile(MediaAccessId accessId,
788  const Pathname &filename) const;
789 
793  void
794  releaseDir(MediaAccessId accessId,
795  const Pathname &dirname) const;
796 
800  void
801  releasePath(MediaAccessId accessId,
802  const Pathname &pathname) const;
803 
807  void
808  dirInfo(MediaAccessId accessId,
809  std::list<std::string> &retlist,
810  const Pathname &dirname,
811  bool dots = true) const;
812 
816  void
817  dirInfo(MediaAccessId accessId,
818  filesystem::DirContent &retlist,
819  const Pathname &dirname,
820  bool dots = true) const;
821 
825  bool doesFileExist(MediaAccessId accessId,
826  const Pathname & filename ) const;
827 
837  void
839  std::vector<std::string> & devices,
840  unsigned int & index) const;
841 
842  void
843  setDeltafile(MediaAccessId accessId,
844  const Pathname &filename ) const;
845 
846  public:
851  static time_t
853 
858  static std::vector<MountEntry>
859  getMountEntries();
860 
870  bool
871  isUseableAttachPoint(const Pathname &path,
872  bool mtab=true) const;
873 
874  private:
875  friend class MediaHandler;
876 
887  getAttachedMedia(MediaAccessId &accessId) const;
888 
899  findAttachedMedia(const MediaSourceRef &media) const;
900 
909  void
910  forceReleaseShared(const MediaSourceRef &media);
911 
912  private:
917  };
918 
919 
921  } // namespace media
923 
925 } // namespace zypp
927 
928 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
929 
930 /*
931 ** vim: set ts=2 sts=2 sw=2 ai et:
932 */
Dummy default media verifier, which is always happy.
Definition: MediaManager.h:88
AttachedMedia findAttachedMedia(const MediaSourceRef &media) const
void releasePath(MediaAccessId accessId, const Pathname &pathname) const
FIXME: see MediaAccess class.
void provideDirTree(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
void setDeltafile(MediaAccessId accessId, const Pathname &filename) const
bool doesFileExist(MediaAccessId accessId, const Pathname &filename) const
FIXME: see MediaAccess class.
zypp::RW_pointer< MediaVerifierBase > MediaVerifierRef
A shared reference to the MediaVerifier implementation.
Definition: MediaManager.h:124
Store and operate with byte count.
Definition: ByteCount.h:30
MediaAccessId MediaId
Definition: MediaManager.h:39
void dirInfo(MediaAccessId accessId, std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const
FIXME: see MediaAccess class.
bool isOpen(MediaAccessId accessId) const
Query if the media access is open / exists.
void provideFile(MediaAccessId accessId, const Pathname &filename, const ByteCount &expectedFileSize) const
Provide provide file denoted by relative path below of the 'attach point' of the specified media and ...
Interface to implement a media verifier.
Definition: MediaManager.h:55
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:916
virtual std::string info() const
Returns a string with some info about the verifier.
Pathname localPath(MediaAccessId accessId, const Pathname &pathname) const
Shortcut for 'localRoot() + pathname', but returns an empty pathname if media is not attached.
~MediaManager()
Destroys MediaManager envelope instance.
void release(MediaAccessId accessId, const std::string &ejectDev="")
Release the attached media and optionally eject.
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
Provides API related macros.
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 getAttachedMedia(MediaAccessId &accessId) const
void provideDir(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
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.
void releaseDir(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
Url url(MediaAccessId accessId) const
Returns the Media Access Url of the media access id.
Manages access to the 'physical' media, e.g CDROM drives, Disk volumes, directory trees,...
Definition: MediaManager.h:470
bool isSharedMedia(MediaAccessId accessId) const
Returns information if media is on a shared physical device or not.
bool downloads(MediaAccessId accessId) const
Hint if files are downloaded or not.
MediaVerifierRef verifier
virtual std::string info() const
Returns the "zypp::media::NoVerifier" string.
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
bool isAttached(MediaAccessId accessId) const
Check if media is attached or not.
void releaseAll()
Release all attached media.
bool isDesiredMedia(MediaAccessId accessId) const
Ask the registered verifier if the attached media is the desired one 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 ...
Pathname localRoot(MediaAccessId accessId) const
Return the local directory that corresponds to medias url, no matter if media isAttached or not.
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.
void releaseFile(MediaAccessId accessId, const Pathname &filename) const
FIXME: see MediaAccess class.
unsigned int MediaNr
Definition: MediaManager.h:40
void close(MediaAccessId accessId)
Close the media access with specified id.
std::string protocol(MediaAccessId accessId) const
Query the protocol name used by the media access handler.
static std::vector< MountEntry > getMountEntries()
Get current mount entries from /etc/mtab file.
bool isUseableAttachPoint(const Pathname &path, bool mtab=true) const
Check if the specified path is useable as attach point.