libzypp 8.13.6
|
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 */