libzypp 9.41.1
|
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 // 00473 class MediaManager: private zypp::base::NonCopyable 00474 { 00475 public: 00487 MediaManager(); 00488 00493 ~MediaManager(); 00494 00515 MediaAccessId 00516 open(const Url &url, const Pathname & preferred_attach_point = ""); 00517 00522 void 00523 close(MediaAccessId accessId); 00524 00531 bool 00532 isOpen(MediaAccessId accessId) const; 00533 00543 std::string 00544 protocol(MediaAccessId accessId) const; 00545 00551 bool 00552 downloads(MediaAccessId accessId) const; 00553 00555 static 00556 ZYPP_DEPRECATED bool downloads(const Url &url) 00557 { return url.schemeIsDownloading(); } 00558 00566 Url 00567 url(MediaAccessId accessId) const; 00568 00569 public: 00578 void 00579 addVerifier(MediaAccessId accessId, 00580 const MediaVerifierRef &verifier); 00581 00589 void 00590 delVerifier(MediaAccessId accessId); 00591 00592 public: 00605 bool 00606 setAttachPrefix(const Pathname &attach_prefix); 00607 00617 void 00618 attach(MediaAccessId accessId); 00619 00621 ZYPP_DEPRECATED void attachDesiredMedia(MediaAccessId accessId) 00622 { attach( accessId ); } 00623 00635 void 00636 release(MediaAccessId accessId, const std::string & ejectDev = ""); 00637 00641 void 00642 releaseAll(); 00643 00658 void 00659 disconnect(MediaAccessId accessId); 00660 00668 bool 00669 isAttached(MediaAccessId accessId) const; 00670 00679 bool 00680 isSharedMedia(MediaAccessId accessId) const; 00681 00691 bool 00692 isDesiredMedia(MediaAccessId accessId) const; 00693 00704 bool 00705 isDesiredMedia(MediaAccessId accessId, 00706 const MediaVerifierRef &verifier) const; 00707 00719 bool 00720 isChangeable(MediaAccessId accessId); 00721 00734 Pathname 00735 localRoot(MediaAccessId accessId) const; 00736 00749 Pathname 00750 localPath(MediaAccessId accessId, const Pathname & pathname) const; 00751 00752 public: 00771 void 00772 provideFile(MediaAccessId accessId, 00773 const Pathname &filename ) const; 00774 00778 void 00779 provideDir(MediaAccessId accessId, 00780 const Pathname &dirname) const; 00781 00785 void 00786 provideDirTree(MediaAccessId accessId, 00787 const Pathname &dirname) const; 00788 00792 void 00793 releaseFile(MediaAccessId accessId, 00794 const Pathname &filename) const; 00795 00799 void 00800 releaseDir(MediaAccessId accessId, 00801 const Pathname &dirname) const; 00802 00806 void 00807 releasePath(MediaAccessId accessId, 00808 const Pathname &pathname) const; 00809 00813 void 00814 dirInfo(MediaAccessId accessId, 00815 std::list<std::string> &retlist, 00816 const Pathname &dirname, 00817 bool dots = true) const; 00818 00822 void 00823 dirInfo(MediaAccessId accessId, 00824 filesystem::DirContent &retlist, 00825 const Pathname &dirname, 00826 bool dots = true) const; 00827 00831 bool doesFileExist(MediaAccessId accessId, 00832 const Pathname & filename ) const; 00833 00843 void 00844 getDetectedDevices(MediaAccessId accessId, 00845 std::vector<std::string> & devices, 00846 unsigned int & index) const; 00847 00848 void 00849 setDeltafile(MediaAccessId accessId, 00850 const Pathname &filename ) const; 00851 00852 public: 00857 static time_t 00858 getMountTableMTime(); 00859 00864 static std::vector<MountEntry> 00865 getMountEntries(); 00866 00876 bool 00877 isUseableAttachPoint(const Pathname &path, 00878 bool mtab=true) const; 00879 00880 private: 00881 friend class MediaHandler; 00882 00892 AttachedMedia 00893 getAttachedMedia(MediaAccessId &accessId) const; 00894 00904 AttachedMedia 00905 findAttachedMedia(const MediaSourceRef &media) const; 00906 00915 void 00916 forceReleaseShared(const MediaSourceRef &media); 00917 00918 private: 00922 static zypp::RW_pointer<MediaManager_Impl> m_impl; 00923 }; 00924 00925 00927 } // namespace media 00929 00931 } // namespace zypp 00933 00934 #endif // ZYPP_MEDIA_MEDIAMANAGER_H 00935 00936 /* 00937 ** vim: set ts=2 sts=2 sw=2 ai et: 00938 */