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     //
00469     class MediaManager: private zypp::base::NonCopyable
00470     {
00471     public:
00483       MediaManager();
00484 
00489       ~MediaManager();
00490 
00511       MediaAccessId
00512       open(const Url &url, const Pathname & preferred_attach_point = "");
00513 
00518       void
00519       close(MediaAccessId accessId);
00520 
00527       bool
00528       isOpen(MediaAccessId accessId) const;
00529 
00539       std::string
00540       protocol(MediaAccessId accessId) const;
00541 
00547       bool
00548       downloads(MediaAccessId accessId) const;
00549 
00551       static
00552       ZYPP_DEPRECATED bool downloads(const Url &url)
00553       { return url.schemeIsDownloading(); }
00554 
00562       Url
00563       url(MediaAccessId accessId) const;
00564 
00565     public:
00574       void
00575       addVerifier(MediaAccessId accessId,
00576                   const MediaVerifierRef &verifier);
00577 
00585       void
00586       delVerifier(MediaAccessId accessId);
00587 
00588     public:
00601       bool
00602       setAttachPrefix(const Pathname &attach_prefix);
00603 
00613       void
00614       attach(MediaAccessId accessId);
00615 
00617       ZYPP_DEPRECATED void attachDesiredMedia(MediaAccessId accessId)
00618       { attach( accessId ); }
00619 
00631       void
00632       release(MediaAccessId accessId, const std::string & ejectDev = "");
00633 
00637       void
00638       releaseAll();
00639 
00654       void
00655       disconnect(MediaAccessId accessId);
00656 
00664       bool
00665       isAttached(MediaAccessId accessId) const;
00666 
00675       bool
00676       isSharedMedia(MediaAccessId accessId) const;
00677 
00687       bool
00688       isDesiredMedia(MediaAccessId accessId) const;
00689 
00700       bool
00701       isDesiredMedia(MediaAccessId           accessId,
00702                      const MediaVerifierRef &verifier) const;
00703 
00715       bool
00716       isChangeable(MediaAccessId accessId);
00717 
00730       Pathname
00731       localRoot(MediaAccessId accessId) const;
00732 
00745       Pathname
00746       localPath(MediaAccessId accessId, const Pathname & pathname) const;
00747 
00748     public:
00767       void
00768       provideFile(MediaAccessId   accessId,
00769                   const Pathname &filename ) const;
00770 
00774       void
00775       provideDir(MediaAccessId   accessId,
00776                  const Pathname &dirname) const;
00777 
00781       void
00782       provideDirTree(MediaAccessId  accessId,
00783                      const Pathname &dirname) const;
00784 
00788       void
00789       releaseFile(MediaAccessId   accessId,
00790                   const Pathname &filename) const;
00791 
00795       void
00796       releaseDir(MediaAccessId   accessId,
00797                  const Pathname &dirname) const;
00798 
00802       void
00803       releasePath(MediaAccessId   accessId,
00804                   const Pathname &pathname) const;
00805 
00809       void
00810       dirInfo(MediaAccessId           accessId,
00811               std::list<std::string> &retlist,
00812               const Pathname         &dirname,
00813               bool                    dots = true) const;
00814 
00818       void
00819       dirInfo(MediaAccessId           accessId,
00820               filesystem::DirContent &retlist,
00821               const Pathname         &dirname,
00822               bool                   dots = true) const;
00823 
00827       bool doesFileExist(MediaAccessId  accessId,
00828                          const Pathname & filename ) const;
00829 
00839       void
00840       getDetectedDevices(MediaAccessId accessId,
00841                          std::vector<std::string> & devices,
00842                          unsigned int & index) const;
00843 
00844       void
00845       setDeltafile(MediaAccessId   accessId,
00846                   const Pathname &filename ) const;
00847 
00848     public:
00853       static time_t
00854       getMountTableMTime();
00855 
00860       static std::vector<MountEntry>
00861       getMountEntries();
00862 
00872       bool
00873       isUseableAttachPoint(const Pathname &path,
00874                            bool            mtab=true) const;
00875 
00876     private:
00877       friend class MediaHandler;
00878 
00888       AttachedMedia
00889       getAttachedMedia(MediaAccessId &accessId) const;
00890 
00900       AttachedMedia
00901       findAttachedMedia(const MediaSourceRef &media) const;
00902 
00911       void
00912       forceReleaseShared(const MediaSourceRef &media);
00913 
00914     private:
00918       static zypp::RW_pointer<MediaManager_Impl> m_impl;
00919     };
00920 
00921 
00923   } // namespace media
00925 
00927 } // namespace zypp
00929 
00930 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00931 
00932 /*
00933 ** vim: set ts=2 sts=2 sw=2 ai et:
00934 */

Generated on Tue May 5 14:43:17 2015 for libzypp by  doxygen 1.5.6