MediaManager.h
Go to the documentation of this file.00001
00002
00003
00004
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
00039 typedef MediaAccessId MediaId;
00040 typedef unsigned int MediaNr;
00041
00042
00044
00045 class MountEntry;
00046 class MediaManager_Impl;
00047
00049
00050
00051
00055 class MediaVerifierBase
00056 {
00057 public:
00058 MediaVerifierBase()
00059 {}
00060
00061 virtual
00062 ~MediaVerifierBase()
00063 {}
00064
00069 virtual std::string
00070 info() const;
00071
00072
00073
00074
00075
00076 virtual bool
00077 isDesiredMedia(const MediaAccessRef &ref) = 0;
00078 };
00079
00080
00082
00083
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
00106
00107
00108 virtual bool
00109 isDesiredMedia(const MediaAccessRef &ref)
00110 {
00111 (void)ref;
00112 return true;
00113 }
00114 };
00115
00116
00118
00119
00120
00124 typedef zypp::RW_pointer<MediaVerifierBase> MediaVerifierRef;
00125
00126
00128
00129
00130
00438 class MediaManager: private zypp::base::NonCopyable
00439 {
00440 public:
00452 MediaManager();
00453
00458 ~MediaManager();
00459
00480 MediaAccessId
00481 open(const Url &url, const Pathname & preferred_attach_point = "");
00482
00487 void
00488 close(MediaAccessId accessId);
00489
00496 bool
00497 isOpen(MediaAccessId accessId) const;
00498
00508 std::string
00509 protocol(MediaAccessId accessId) const;
00510
00516 bool
00517 downloads(MediaAccessId accessId) const;
00518
00520 static
00521 ZYPP_DEPRECATED bool downloads(const Url &url)
00522 { return url.schemeIsDownloading(); }
00523
00531 Url
00532 url(MediaAccessId accessId) const;
00533
00534 public:
00543 void
00544 addVerifier(MediaAccessId accessId,
00545 const MediaVerifierRef &verifier);
00546
00554 void
00555 delVerifier(MediaAccessId accessId);
00556
00557 public:
00570 bool
00571 setAttachPrefix(const Pathname &attach_prefix);
00572
00582 void
00583 attach(MediaAccessId accessId);
00584
00586 ZYPP_DEPRECATED void attachDesiredMedia(MediaAccessId accessId)
00587 { attach( accessId ); }
00588
00600 void
00601 release(MediaAccessId accessId, const std::string & ejectDev = "");
00602
00606 void
00607 releaseAll();
00608
00623 void
00624 disconnect(MediaAccessId accessId);
00625
00633 bool
00634 isAttached(MediaAccessId accessId) const;
00635
00644 bool
00645 isSharedMedia(MediaAccessId accessId) const;
00646
00656 bool
00657 isDesiredMedia(MediaAccessId accessId) const;
00658
00669 bool
00670 isDesiredMedia(MediaAccessId accessId,
00671 const MediaVerifierRef &verifier) const;
00672
00684 bool
00685 isChangeable(MediaAccessId accessId);
00686
00699 Pathname
00700 localRoot(MediaAccessId accessId) const;
00701
00714 Pathname
00715 localPath(MediaAccessId accessId, const Pathname & pathname) const;
00716
00717 public:
00736 void
00737 provideFile(MediaAccessId accessId,
00738 const Pathname &filename ) const;
00739
00743 void
00744 provideDir(MediaAccessId accessId,
00745 const Pathname &dirname) const;
00746
00750 void
00751 provideDirTree(MediaAccessId accessId,
00752 const Pathname &dirname) const;
00753
00757 void
00758 releaseFile(MediaAccessId accessId,
00759 const Pathname &filename) const;
00760
00764 void
00765 releaseDir(MediaAccessId accessId,
00766 const Pathname &dirname) const;
00767
00771 void
00772 releasePath(MediaAccessId accessId,
00773 const Pathname &pathname) const;
00774
00778 void
00779 dirInfo(MediaAccessId accessId,
00780 std::list<std::string> &retlist,
00781 const Pathname &dirname,
00782 bool dots = true) const;
00783
00787 void
00788 dirInfo(MediaAccessId accessId,
00789 filesystem::DirContent &retlist,
00790 const Pathname &dirname,
00791 bool dots = true) const;
00792
00796 bool doesFileExist(MediaAccessId accessId,
00797 const Pathname & filename ) const;
00798
00808 void
00809 getDetectedDevices(MediaAccessId accessId,
00810 std::vector<std::string> & devices,
00811 unsigned int & index) const;
00812
00813 public:
00818 static time_t
00819 getMountTableMTime();
00820
00825 static std::vector<MountEntry>
00826 getMountEntries();
00827
00837 bool
00838 isUseableAttachPoint(const Pathname &path,
00839 bool mtab=true) const;
00840
00841 private:
00842 friend class MediaHandler;
00843
00853 AttachedMedia
00854 getAttachedMedia(MediaAccessId &accessId) const;
00855
00865 AttachedMedia
00866 findAttachedMedia(const MediaSourceRef &media) const;
00867
00876 void
00877 forceReleaseShared(const MediaSourceRef &media);
00878
00879 private:
00883 static zypp::RW_pointer<MediaManager_Impl> m_impl;
00884 };
00885
00886
00888 }
00890
00892 }
00894
00895 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00896
00897
00898
00899