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
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
00579 void
00580 attach(MediaAccessId accessId, bool next = false);
00581
00597 void
00598 release(MediaAccessId accessId, bool eject = false);
00599
00614 void
00615 disconnect(MediaAccessId accessId);
00616
00624 bool
00625 isAttached(MediaAccessId accessId) const;
00626
00635 bool
00636 isSharedMedia(MediaAccessId accessId) const;
00637
00647 bool
00648 isDesiredMedia(MediaAccessId accessId) const;
00649
00660 bool
00661 isDesiredMedia(MediaAccessId accessId,
00662 const MediaVerifierRef &verifier) const;
00663
00676 Pathname
00677 localRoot(MediaAccessId accessId) const;
00678
00691 Pathname
00692 localPath(MediaAccessId accessId, const Pathname & pathname) const;
00693
00694 public:
00720 void
00721 provideFile(MediaAccessId accessId,
00722 const Pathname &filename,
00723 bool cached = false,
00724 bool checkonly = false) const;
00725
00729 void
00730 provideDir(MediaAccessId accessId,
00731 const Pathname &dirname) const;
00732
00736 void
00737 provideDirTree(MediaAccessId accessId,
00738 const Pathname &dirname) const;
00739
00743 void
00744 releaseFile(MediaAccessId accessId,
00745 const Pathname &filename) const;
00746
00750 void
00751 releaseDir(MediaAccessId accessId,
00752 const Pathname &dirname) const;
00753
00757 void
00758 releasePath(MediaAccessId accessId,
00759 const Pathname &pathname) const;
00760
00764 void
00765 dirInfo(MediaAccessId accessId,
00766 std::list<std::string> &retlist,
00767 const Pathname &dirname,
00768 bool dots = true) const;
00769
00773 void
00774 dirInfo(MediaAccessId accessId,
00775 filesystem::DirContent &retlist,
00776 const Pathname &dirname,
00777 bool dots = true) const;
00778
00779
00780 public:
00785 static time_t
00786 getMountTableMTime();
00787
00792 static std::vector<MountEntry>
00793 getMountEntries();
00794
00804 bool
00805 isUseableAttachPoint(const Pathname &path,
00806 bool mtab=true) const;
00807
00808 private:
00809 friend class MediaHandler;
00810
00820 AttachedMedia
00821 getAttachedMedia(MediaAccessId &accessId) const;
00822
00832 AttachedMedia
00833 findAttachedMedia(const MediaSourceRef &media) const;
00834
00843 void
00844 forceReleaseShared(const MediaSourceRef &media);
00845
00846 private:
00850 static zypp::RW_pointer<MediaManager_Impl> m_impl;
00851 };
00852
00853
00855 }
00857
00859 }
00861
00862 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00863
00864
00865
00866