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
00391 class MediaManager: private zypp::base::NonCopyable
00392 {
00393 public:
00405 MediaManager();
00406
00411 ~MediaManager();
00412
00433 MediaAccessId
00434 open(const Url &url, const Pathname & preferred_attach_point = "");
00435
00440 void
00441 close(MediaAccessId accessId);
00442
00449 bool
00450 isOpen(MediaAccessId accessId) const;
00451
00461 std::string
00462 protocol(MediaAccessId accessId) const;
00463
00469 bool
00470 downloads(MediaAccessId accessId) const;
00471
00482 static bool
00483 downloads(const Url &url);
00484
00492 Url
00493 url(MediaAccessId accessId) const;
00494
00495 public:
00504 void
00505 addVerifier(MediaAccessId accessId,
00506 const MediaVerifierRef &verifier);
00507
00515 void
00516 delVerifier(MediaAccessId accessId);
00517
00518 public:
00531 bool
00532 setAttachPrefix(const Pathname &attach_prefix);
00533
00544 void
00545 attach(MediaAccessId accessId, bool next = false);
00546
00562 void
00563 release(MediaAccessId accessId, bool eject = false);
00564
00579 void
00580 disconnect(MediaAccessId accessId);
00581
00589 bool
00590 isAttached(MediaAccessId accessId) const;
00591
00600 bool
00601 isSharedMedia(MediaAccessId accessId) const;
00602
00612 bool
00613 isDesiredMedia(MediaAccessId accessId) const;
00614
00625 bool
00626 isDesiredMedia(MediaAccessId accessId,
00627 const MediaVerifierRef &verifier) const;
00628
00641 Pathname
00642 localRoot(MediaAccessId accessId) const;
00643
00656 Pathname
00657 localPath(MediaAccessId accessId, const Pathname & pathname) const;
00658
00659 public:
00685 void
00686 provideFile(MediaAccessId accessId,
00687 const Pathname &filename,
00688 bool cached = false,
00689 bool checkonly = false) const;
00690
00694 void
00695 provideDir(MediaAccessId accessId,
00696 const Pathname &dirname) const;
00697
00701 void
00702 provideDirTree(MediaAccessId accessId,
00703 const Pathname &dirname) const;
00704
00708 void
00709 releaseFile(MediaAccessId accessId,
00710 const Pathname &filename) const;
00711
00715 void
00716 releaseDir(MediaAccessId accessId,
00717 const Pathname &dirname) const;
00718
00722 void
00723 releasePath(MediaAccessId accessId,
00724 const Pathname &pathname) const;
00725
00729 void
00730 dirInfo(MediaAccessId accessId,
00731 std::list<std::string> &retlist,
00732 const Pathname &dirname,
00733 bool dots = true) const;
00734
00738 void
00739 dirInfo(MediaAccessId accessId,
00740 filesystem::DirContent &retlist,
00741 const Pathname &dirname,
00742 bool dots = true) const;
00743
00744
00745 public:
00750 static time_t
00751 getMountTableMTime();
00752
00757 static std::vector<MountEntry>
00758 getMountEntries();
00759
00769 bool
00770 isUseableAttachPoint(const Pathname &path,
00771 bool mtab=true) const;
00772
00773 private:
00774 friend class MediaHandler;
00775
00785 AttachedMedia
00786 getAttachedMedia(MediaAccessId &accessId) const;
00787
00797 AttachedMedia
00798 findAttachedMedia(const MediaSourceRef &media) const;
00799
00808 void
00809 forceReleaseShared(const MediaSourceRef &media);
00810
00811 private:
00815 static zypp::RW_pointer<MediaManager_Impl> m_impl;
00816 };
00817
00818
00820 }
00822
00824 }
00826
00827 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00828
00829
00830
00831