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     //
00426     class MediaManager: private zypp::base::NonCopyable
00427     {
00428     public:
00440       MediaManager();
00441 
00446       ~MediaManager();
00447 
00468       MediaAccessId
00469       open(const Url &url, const Pathname & preferred_attach_point = "");
00470 
00475       void
00476       close(MediaAccessId accessId);
00477 
00484       bool
00485       isOpen(MediaAccessId accessId) const;
00486 
00496       std::string
00497       protocol(MediaAccessId accessId) const;
00498 
00504       bool
00505       downloads(MediaAccessId accessId) const;
00506 
00517       static bool
00518       downloads(const Url &url);
00519 
00527       Url
00528       url(MediaAccessId accessId) const;
00529 
00530     public:
00539       void
00540       addVerifier(MediaAccessId accessId,
00541                   const MediaVerifierRef &verifier);
00542 
00550       void
00551       delVerifier(MediaAccessId accessId);
00552 
00553     public:
00566       bool
00567       setAttachPrefix(const Pathname &attach_prefix);
00568 
00581       void
00582       attach(MediaAccessId accessId, bool next = false) ZYPP_DEPRECATED;
00583 
00584       void
00585       attachDesiredMedia(MediaAccessId accessId);
00586 
00602       void
00603       release(MediaAccessId accessId, bool eject = false);
00604 
00608       void
00609       releaseAll();
00610 
00625       void
00626       disconnect(MediaAccessId accessId);
00627 
00635       bool
00636       isAttached(MediaAccessId accessId) const;
00637 
00646       bool
00647       isSharedMedia(MediaAccessId accessId) const;
00648 
00658       bool
00659       isDesiredMedia(MediaAccessId accessId) const;
00660 
00671       bool
00672       isDesiredMedia(MediaAccessId           accessId,
00673                      const MediaVerifierRef &verifier) const;
00674 
00686       bool
00687       isChangeable(MediaAccessId accessId);
00688 
00701       Pathname
00702       localRoot(MediaAccessId accessId) const;
00703 
00716       Pathname
00717       localPath(MediaAccessId accessId, const Pathname & pathname) const;
00718 
00719     public:
00745       void
00746       provideFile(MediaAccessId   accessId,
00747                   const Pathname &filename,
00748                   bool            cached    = false,
00749                   bool            checkonly = false) const;
00750 
00754       void
00755       provideDir(MediaAccessId   accessId,
00756                  const Pathname &dirname) const;
00757 
00761       void
00762       provideDirTree(MediaAccessId  accessId,
00763                      const Pathname &dirname) const;
00764 
00768       void
00769       releaseFile(MediaAccessId   accessId,
00770                   const Pathname &filename) const;
00771 
00775       void
00776       releaseDir(MediaAccessId   accessId,
00777                  const Pathname &dirname) const;
00778 
00782       void
00783       releasePath(MediaAccessId   accessId,
00784                   const Pathname &pathname) const;
00785 
00789       void
00790       dirInfo(MediaAccessId           accessId,
00791               std::list<std::string> &retlist,
00792               const Pathname         &dirname,
00793               bool                    dots = true) const;
00794 
00798       void
00799       dirInfo(MediaAccessId           accessId,
00800               filesystem::DirContent &retlist,
00801               const Pathname         &dirname,
00802               bool                   dots = true) const;
00803 
00807       bool doesFileExist(MediaAccessId  accessId,
00808                          const Pathname & filename ) const;
00809     public:
00814       static time_t
00815       getMountTableMTime();
00816 
00821       static std::vector<MountEntry>
00822       getMountEntries();
00823 
00833       bool
00834       isUseableAttachPoint(const Pathname &path,
00835                            bool            mtab=true) const;
00836 
00837     private:
00838       friend class MediaHandler;
00839 
00849       AttachedMedia
00850       getAttachedMedia(MediaAccessId &accessId) const;
00851 
00861       AttachedMedia
00862       findAttachedMedia(const MediaSourceRef &media) const;
00863 
00872       void
00873       forceReleaseShared(const MediaSourceRef &media);
00874 
00875     private:
00879       static zypp::RW_pointer<MediaManager_Impl> m_impl;
00880     };
00881 
00882 
00884   } // namespace media
00886 
00888 } // namespace zypp
00890 
00891 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00892 
00893 /*
00894 ** vim: set ts=2 sts=2 sw=2 ai et:
00895 */

Generated on Tue Sep 25 19:23:02 2007 for libzypp by  doxygen 1.5.3