libzypp 8.13.6

MediaManager.h

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00012 #ifndef ZYPP_MEDIA_MEDIAMANAGER_H
00013 #define ZYPP_MEDIA_MEDIAMANAGER_H
00014 
00015 #include <zypp/media/MediaAccess.h>
00016 
00017 #include <zypp/base/Deprecated.h>
00018 #include <zypp/base/NonCopyable.h>
00019 #include <zypp/base/PtrTypes.h>
00020 #include <zypp/Pathname.h>
00021 #include <zypp/Url.h>
00022 
00023 #include <list>
00024 
00025 
00027 namespace zypp
00028 { 
00029 
00031   namespace media
00032   { 
00033 
00034 
00036     typedef zypp::RW_pointer<MediaAccess> MediaAccessRef;
00037 
00038     // OBSOLETE HERE:
00039     typedef MediaAccessId                 MediaId;
00040     typedef unsigned int                  MediaNr;
00041 
00042 
00044     // forward declaration
00045     class MountEntry;
00046     class MediaManager_Impl;
00047 
00049     //
00050     // CLASS NAME : MediaVerifierBase
00051     //
00055     class MediaVerifierBase //: private zypp::NonCopyable
00056     {
00057     public:
00058       MediaVerifierBase()
00059       {}
00060 
00061       virtual
00062       ~MediaVerifierBase()
00063       {}
00064 
00069       virtual std::string
00070       info() const;
00071 
00072       /*
00073       ** Check if the specified attached media contains
00074       ** the desired media (e.g. SLES10 CD1).
00075       */
00076       virtual bool
00077       isDesiredMedia(const MediaAccessRef &ref) = 0;
00078     };
00079 
00080 
00082     //
00083     // CLASS NAME : NoVerifier
00084     //
00088     class NoVerifier : public MediaVerifierBase
00089     {
00090     public:
00091       NoVerifier(): MediaVerifierBase()
00092       {}
00093 
00094       virtual
00095       ~NoVerifier()
00096       {}
00097 
00101       virtual std::string
00102       info() const;
00103 
00104       /*
00105       ** Don't check if the specified attached media contains
00106       ** the desired media number. Always return true.
00107       */
00108       virtual bool
00109       isDesiredMedia(const MediaAccessRef &ref)
00110       {
00111         (void)ref;
00112         return true;
00113       }
00114     };
00115 
00116 
00118     //
00119     // CLASS NAME : MediaVerifierRef
00120     //
00124     typedef zypp::RW_pointer<MediaVerifierBase> MediaVerifierRef;
00125 
00126 
00128     //
00129     // CLASS NAME : MediaManager
00130     //
00466     class MediaManager: private zypp::base::NonCopyable
00467     {
00468     public:
00480       MediaManager();
00481 
00486       ~MediaManager();
00487 
00508       MediaAccessId
00509       open(const Url &url, const Pathname & preferred_attach_point = "");
00510 
00515       void
00516       close(MediaAccessId accessId);
00517 
00524       bool
00525       isOpen(MediaAccessId accessId) const;
00526 
00536       std::string
00537       protocol(MediaAccessId accessId) const;
00538 
00544       bool
00545       downloads(MediaAccessId accessId) const;
00546 
00548       static
00549       ZYPP_DEPRECATED bool downloads(const Url &url)
00550       { return url.schemeIsDownloading(); }
00551 
00559       Url
00560       url(MediaAccessId accessId) const;
00561 
00562     public:
00571       void
00572       addVerifier(MediaAccessId accessId,
00573                   const MediaVerifierRef &verifier);
00574 
00582       void
00583       delVerifier(MediaAccessId accessId);
00584 
00585     public:
00598       bool
00599       setAttachPrefix(const Pathname &attach_prefix);
00600 
00610       void
00611       attach(MediaAccessId accessId);
00612 
00614       ZYPP_DEPRECATED void attachDesiredMedia(MediaAccessId accessId)
00615       { attach( accessId ); }
00616 
00628       void
00629       release(MediaAccessId accessId, const std::string & ejectDev = "");
00630 
00634       void
00635       releaseAll();
00636 
00651       void
00652       disconnect(MediaAccessId accessId);
00653 
00661       bool
00662       isAttached(MediaAccessId accessId) const;
00663 
00672       bool
00673       isSharedMedia(MediaAccessId accessId) const;
00674 
00684       bool
00685       isDesiredMedia(MediaAccessId accessId) const;
00686 
00697       bool
00698       isDesiredMedia(MediaAccessId           accessId,
00699                      const MediaVerifierRef &verifier) const;
00700 
00712       bool
00713       isChangeable(MediaAccessId accessId);
00714 
00727       Pathname
00728       localRoot(MediaAccessId accessId) const;
00729 
00742       Pathname
00743       localPath(MediaAccessId accessId, const Pathname & pathname) const;
00744 
00745     public:
00764       void
00765       provideFile(MediaAccessId   accessId,
00766                   const Pathname &filename ) const;
00767 
00771       void
00772       provideDir(MediaAccessId   accessId,
00773                  const Pathname &dirname) const;
00774 
00778       void
00779       provideDirTree(MediaAccessId  accessId,
00780                      const Pathname &dirname) const;
00781 
00785       void
00786       releaseFile(MediaAccessId   accessId,
00787                   const Pathname &filename) const;
00788 
00792       void
00793       releaseDir(MediaAccessId   accessId,
00794                  const Pathname &dirname) const;
00795 
00799       void
00800       releasePath(MediaAccessId   accessId,
00801                   const Pathname &pathname) const;
00802 
00806       void
00807       dirInfo(MediaAccessId           accessId,
00808               std::list<std::string> &retlist,
00809               const Pathname         &dirname,
00810               bool                    dots = true) const;
00811 
00815       void
00816       dirInfo(MediaAccessId           accessId,
00817               filesystem::DirContent &retlist,
00818               const Pathname         &dirname,
00819               bool                   dots = true) const;
00820 
00824       bool doesFileExist(MediaAccessId  accessId,
00825                          const Pathname & filename ) const;
00826 
00836       void
00837       getDetectedDevices(MediaAccessId accessId,
00838                          std::vector<std::string> & devices,
00839                          unsigned int & index) const;
00840 
00841       void
00842       setDeltafile(MediaAccessId   accessId,
00843                   const Pathname &filename ) const;
00844 
00845     public:
00850       static time_t
00851       getMountTableMTime();
00852 
00857       static std::vector<MountEntry>
00858       getMountEntries();
00859 
00869       bool
00870       isUseableAttachPoint(const Pathname &path,
00871                            bool            mtab=true) const;
00872 
00873     private:
00874       friend class MediaHandler;
00875 
00885       AttachedMedia
00886       getAttachedMedia(MediaAccessId &accessId) const;
00887 
00897       AttachedMedia
00898       findAttachedMedia(const MediaSourceRef &media) const;
00899 
00908       void
00909       forceReleaseShared(const MediaSourceRef &media);
00910 
00911     private:
00915       static zypp::RW_pointer<MediaManager_Impl> m_impl;
00916     };
00917 
00918 
00920   } // namespace media
00922 
00924 } // namespace zypp
00926 
00927 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00928 
00929 /*
00930 ** vim: set ts=2 sts=2 sw=2 ai et:
00931 */