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
00436 class MediaManager: private zypp::base::NonCopyable
00437 {
00438 public:
00450 MediaManager();
00451
00456 ~MediaManager();
00457
00478 MediaAccessId
00479 open(const Url &url, const Pathname & preferred_attach_point = "");
00480
00485 void
00486 close(MediaAccessId accessId);
00487
00494 bool
00495 isOpen(MediaAccessId accessId) const;
00496
00506 std::string
00507 protocol(MediaAccessId accessId) const;
00508
00514 bool
00515 downloads(MediaAccessId accessId) const;
00516
00518 static
00519 ZYPP_DEPRECATED bool downloads(const Url &url)
00520 { return url.schemeIsDownloading(); }
00521
00529 Url
00530 url(MediaAccessId accessId) const;
00531
00532 public:
00541 void
00542 addVerifier(MediaAccessId accessId,
00543 const MediaVerifierRef &verifier);
00544
00552 void
00553 delVerifier(MediaAccessId accessId);
00554
00555 public:
00568 bool
00569 setAttachPrefix(const Pathname &attach_prefix);
00570
00580 void
00581 attach(MediaAccessId accessId);
00582
00584 ZYPP_DEPRECATED void attachDesiredMedia(MediaAccessId accessId)
00585 { attach( accessId ); }
00586
00598 void
00599 release(MediaAccessId accessId, const std::string & ejectDev = "");
00600
00604 void
00605 releaseAll();
00606
00621 void
00622 disconnect(MediaAccessId accessId);
00623
00631 bool
00632 isAttached(MediaAccessId accessId) const;
00633
00642 bool
00643 isSharedMedia(MediaAccessId accessId) const;
00644
00654 bool
00655 isDesiredMedia(MediaAccessId accessId) const;
00656
00667 bool
00668 isDesiredMedia(MediaAccessId accessId,
00669 const MediaVerifierRef &verifier) const;
00670
00682 bool
00683 isChangeable(MediaAccessId accessId);
00684
00697 Pathname
00698 localRoot(MediaAccessId accessId) const;
00699
00712 Pathname
00713 localPath(MediaAccessId accessId, const Pathname & pathname) const;
00714
00715 public:
00734 void
00735 provideFile(MediaAccessId accessId,
00736 const Pathname &filename ) const;
00737
00741 void
00742 provideDir(MediaAccessId accessId,
00743 const Pathname &dirname) const;
00744
00748 void
00749 provideDirTree(MediaAccessId accessId,
00750 const Pathname &dirname) const;
00751
00755 void
00756 releaseFile(MediaAccessId accessId,
00757 const Pathname &filename) const;
00758
00762 void
00763 releaseDir(MediaAccessId accessId,
00764 const Pathname &dirname) const;
00765
00769 void
00770 releasePath(MediaAccessId accessId,
00771 const Pathname &pathname) const;
00772
00776 void
00777 dirInfo(MediaAccessId accessId,
00778 std::list<std::string> &retlist,
00779 const Pathname &dirname,
00780 bool dots = true) const;
00781
00785 void
00786 dirInfo(MediaAccessId accessId,
00787 filesystem::DirContent &retlist,
00788 const Pathname &dirname,
00789 bool dots = true) const;
00790
00794 bool doesFileExist(MediaAccessId accessId,
00795 const Pathname & filename ) const;
00796
00806 void
00807 getDetectedDevices(MediaAccessId accessId,
00808 std::vector<std::string> & devices,
00809 unsigned int & index) const;
00810
00811 public:
00816 static time_t
00817 getMountTableMTime();
00818
00823 static std::vector<MountEntry>
00824 getMountEntries();
00825
00835 bool
00836 isUseableAttachPoint(const Pathname &path,
00837 bool mtab=true) const;
00838
00839 private:
00840 friend class MediaHandler;
00841
00851 AttachedMedia
00852 getAttachedMedia(MediaAccessId &accessId) const;
00853
00863 AttachedMedia
00864 findAttachedMedia(const MediaSourceRef &media) const;
00865
00874 void
00875 forceReleaseShared(const MediaSourceRef &media);
00876
00877 private:
00881 static zypp::RW_pointer<MediaManager_Impl> m_impl;
00882 };
00883
00884
00886 }
00888
00890 }
00892
00893 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00894
00895
00896
00897