libzypp  17.30.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/APIConfig.h>
16 #include <zypp/base/NonCopyable.h>
17 #include <zypp/base/PtrTypes.h>
18 #include <zypp/Pathname.h>
19 #include <zypp/PathInfo.h>
20 #include <zypp/Url.h>
21 #include <zypp-core/OnMediaLocation>
22 #include <zypp/media/MediaSource.h>
23 #include <zypp-media/MediaException>
24 
25 #include <list>
26 
27 
28 namespace zypp::media
29 {
30  class MediaHandler;
31 
32  typedef unsigned int MediaNr;
33 
34 
36  // forward declaration
37  struct MountEntry;
38  class MediaManager_Impl;
39 
41  //
42  // CLASS NAME : MediaVerifierBase
43  //
47  class MediaVerifierBase //: private zypp::NonCopyable
48  {
49  public:
51  {}
52 
54  {}
55 
60  virtual std::string info() const;
61 
62  /*
63  ** Check if the specified attached media contains
64  ** the desired media (e.g. SLES10 CD1).
65  */
66  virtual bool isDesiredMedia(const MediaHandler &ref) const = 0;
67  };
68 
69 
71  //
72  // CLASS NAME : NoVerifier
73  //
78  {
79  public:
81  {}
82 
83  ~NoVerifier() override
84  {}
85 
89  std::string info() const override;
90 
91  /*
92  ** Don't check if the specified attached media contains
93  ** the desired media number. Always return true.
94  */
95  bool isDesiredMedia(const MediaHandler &ref) const override
96  { return true; }
97  };
98 
99 
101  //
102  // CLASS NAME : MediaVerifierRef
103  //
108 
109 
111  //
112  // CLASS NAME : MediaManager
113  //
454  {
455  public:
467  MediaManager();
468 
473  ~MediaManager();
474 
496  open(const Url &url, const Pathname & preferred_attach_point = "");
497 
502  void
503  close(MediaAccessId accessId);
504 
511  bool
512  isOpen(MediaAccessId accessId) const;
513 
523  std::string
524  protocol(MediaAccessId accessId) const;
525 
531  bool
532  downloads(MediaAccessId accessId) const;
533 
541  Url
542  url(MediaAccessId accessId) const;
543 
544  public:
553  void
554  addVerifier(MediaAccessId accessId,
555  const MediaVerifierRef &verifier);
556 
564  void
565  delVerifier(MediaAccessId accessId);
566 
567  public:
580  bool
581  setAttachPrefix(const Pathname &attach_prefix);
582 
592  void
593  attach(MediaAccessId accessId);
594 
606  void
607  release(MediaAccessId accessId, const std::string & ejectDev = "");
608 
612  void
613  releaseAll();
614 
629  void
630  disconnect(MediaAccessId accessId);
631 
639  bool
640  isAttached(MediaAccessId accessId) const;
641 
650  bool
651  isSharedMedia(MediaAccessId accessId) const;
652 
662  bool
663  isDesiredMedia(MediaAccessId accessId) const;
664 
675  bool
676  isDesiredMedia(MediaAccessId accessId,
677  const MediaVerifierRef &verifier) const;
678 
690  bool
691  isChangeable(MediaAccessId accessId);
692 
705  Pathname
706  localRoot(MediaAccessId accessId) const;
707 
720  Pathname
721  localPath(MediaAccessId accessId, const Pathname & pathname) const;
722 
723  public:
724 
729  ZYPP_DEPRECATED void
730  provideFile(MediaAccessId accessId,
731  const Pathname &filename,
732  const ByteCount &expectedFileSize) const;
733 
738  ZYPP_DEPRECATED void
739  provideFile(MediaAccessId accessId,
740  const Pathname &filename ) const;
741 
742 
760  void
761  provideFile(MediaAccessId accessId,
762  const OnMediaLocation &file ) 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  ZYPP_DEPRECATED void
838  setDeltafile(MediaAccessId accessId,
839  const Pathname &filename ) const;
840 
852  void precacheFiles( MediaAccessId accessId,
853  const std::vector<OnMediaLocation> &files);
854 
855  public:
860  static time_t
862 
867  static std::vector<MountEntry>
868  getMountEntries();
869 
879  bool
880  isUseableAttachPoint(const Pathname &path,
881  bool mtab=true) const;
882 
883  private:
884  friend class MediaHandler;
885 
896  getAttachedMedia(MediaAccessId &accessId) const;
897 
908  findAttachedMedia(const MediaSourceRef &media) const;
909 
918  void
919  forceReleaseShared(const MediaSourceRef &media);
920 
921  private:
926  };
927 
929 } // namespace zypp::media
931 
932 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
933 
934 /*
935 ** vim: set ts=2 sts=2 sw=2 ai et:
936 */
MediaVerifierRef verifier
Store and operate with byte count.
Definition: ByteCount.h:31
Describes a resource file located on a medium.
Url manipulation class.
Definition: Url.h:92
Abstract base class for 'physical' MediaHandler like MediaCD, etc.
Definition: MediaHandler.h:51
Manages access to the 'physical' media, e.g CDROM drives, Disk volumes, directory trees,...
Definition: MediaManager.h:454
ZYPP_DEPRECATED void setDeltafile(MediaAccessId accessId, const Pathname &filename) const
MediaAccessId open(const Url &url, const Pathname &preferred_attach_point="")
Opens the media access for specified with the url.
void delVerifier(MediaAccessId accessId)
Remove verifier for specified media id.
void releaseFile(MediaAccessId accessId, const Pathname &filename) const
FIXME: see MediaAccess class.
bool isChangeable(MediaAccessId accessId)
Simple check, based on media's URL scheme, telling whether the it is possible to physically change th...
void forceReleaseShared(const MediaSourceRef &media)
void releaseAll()
Release all attached media.
static zypp::RW_pointer< MediaManager_Impl > m_impl
Static reference to the implementation (singleton).
Definition: MediaManager.h:925
void disconnect(MediaAccessId accessId)
Disconnect a remote media.
void attach(MediaAccessId accessId)
Attach the media using the concrete handler (checks all devices).
void releaseDir(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
bool isOpen(MediaAccessId accessId) const
Query if the media access is open / exists.
void releasePath(MediaAccessId accessId, const Pathname &pathname) const
FIXME: see MediaAccess class.
void dirInfo(MediaAccessId accessId, std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const
FIXME: see MediaAccess class.
void close(MediaAccessId accessId)
Close the media access with specified id.
Url url(MediaAccessId accessId) const
Returns the Media Access Url of the media access id.
bool isDesiredMedia(MediaAccessId accessId) const
Ask the registered verifier if the attached media is the desired one or not.
ZYPP_DEPRECATED void provideFile(MediaAccessId accessId, const Pathname &filename, const ByteCount &expectedFileSize) const
void release(MediaAccessId accessId, const std::string &ejectDev="")
Release the attached media and optionally eject.
void precacheFiles(MediaAccessId accessId, const std::vector< OnMediaLocation > &files)
Tries to fetch the given files and precaches them.
bool isAttached(MediaAccessId accessId) const
Check if media is attached or not.
AttachedMedia getAttachedMedia(MediaAccessId &accessId) const
static time_t getMountTableMTime()
Get the modification time of the /etc/mtab file.
~MediaManager()
Destroys MediaManager envelope instance.
bool isSharedMedia(MediaAccessId accessId) const
Returns information if media is on a shared physical device or not.
std::string protocol(MediaAccessId accessId) const
Query the protocol name used by the media access handler.
bool doesFileExist(MediaAccessId accessId, const Pathname &filename) const
FIXME: see MediaAccess class.
void provideDir(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
AttachedMedia findAttachedMedia(const MediaSourceRef &media) const
bool isUseableAttachPoint(const Pathname &path, bool mtab=true) const
Check if the specified path is useable as attach point.
MediaManager()
Creates a MediaManager envelope instance.
Pathname localPath(MediaAccessId accessId, const Pathname &pathname) const
Shortcut for 'localRoot() + pathname', but returns an empty pathname if media is not attached.
void provideDirTree(MediaAccessId accessId, const Pathname &dirname) const
FIXME: see MediaAccess class.
void addVerifier(MediaAccessId accessId, const MediaVerifierRef &verifier)
Add verifier implementation for the specified media id.
bool setAttachPrefix(const Pathname &attach_prefix)
Set or resets the directory name, where the media manager handlers create their temporary attach poin...
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.
bool downloads(MediaAccessId accessId) const
Hint if files are downloaded or not.
static std::vector< MountEntry > getMountEntries()
Get current mount entries from /etc/mtab file.
Interface to implement a media verifier.
Definition: MediaManager.h:48
virtual std::string info() const
Returns a string with some info about the verifier.
virtual bool isDesiredMedia(const MediaHandler &ref) const =0
Dummy default media verifier, which is always happy.
Definition: MediaManager.h:78
std::string info() const override
Returns the "zypp::media::NoVerifier" string.
bool isDesiredMedia(const MediaHandler &ref) const override
Definition: MediaManager.h:95
boost::noncopyable NonCopyable
Ensure derived classes cannot be copied.
Definition: NonCopyable.h:26
std::list< DirEntry > DirContent
Returned by readdir.
Definition: PathInfo.h:518
unsigned int MediaNr
Definition: MediaManager.h:30
zypp::RW_pointer< MediaVerifierBase > MediaVerifierRef
A shared reference to the MediaVerifier implementation.
Definition: MediaManager.h:107
unsigned int MediaAccessId
Media manager access Id type.
Definition: MediaSource.h:29
Wrapper for const correct access via Smart pointer types.
Definition: PtrTypes.h:286
A simple structure containing references to a media source and its attach point.
Definition: MediaSource.h:134
#define ZYPP_DEPRECATED
The ZYPP_DEPRECATED macro can be used to trigger compile-time warnings with gcc >= 3....
Definition: Globals.h:99