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
00581 void
00582 attach(MediaAccessId accessId, bool next = false) ZYPP_DEPRECATED;
00583
00584 void
00585 attachDesiredMedia(MediaAccessId accessId);
00586
00602 void
00603 release(MediaAccessId accessId, bool eject = false);
00604
00608 void
00609 releaseAll();
00610
00625 void
00626 disconnect(MediaAccessId accessId);
00627
00635 bool
00636 isAttached(MediaAccessId accessId) const;
00637
00646 bool
00647 isSharedMedia(MediaAccessId accessId) const;
00648
00658 bool
00659 isDesiredMedia(MediaAccessId accessId) const;
00660
00671 bool
00672 isDesiredMedia(MediaAccessId accessId,
00673 const MediaVerifierRef &verifier) const;
00674
00686 bool
00687 isChangeable(MediaAccessId accessId);
00688
00701 Pathname
00702 localRoot(MediaAccessId accessId) const;
00703
00716 Pathname
00717 localPath(MediaAccessId accessId, const Pathname & pathname) const;
00718
00719 public:
00745 void
00746 provideFile(MediaAccessId accessId,
00747 const Pathname &filename,
00748 bool cached = false,
00749 bool checkonly = false) const;
00750
00754 void
00755 provideDir(MediaAccessId accessId,
00756 const Pathname &dirname) const;
00757
00761 void
00762 provideDirTree(MediaAccessId accessId,
00763 const Pathname &dirname) const;
00764
00768 void
00769 releaseFile(MediaAccessId accessId,
00770 const Pathname &filename) const;
00771
00775 void
00776 releaseDir(MediaAccessId accessId,
00777 const Pathname &dirname) const;
00778
00782 void
00783 releasePath(MediaAccessId accessId,
00784 const Pathname &pathname) const;
00785
00789 void
00790 dirInfo(MediaAccessId accessId,
00791 std::list<std::string> &retlist,
00792 const Pathname &dirname,
00793 bool dots = true) const;
00794
00798 void
00799 dirInfo(MediaAccessId accessId,
00800 filesystem::DirContent &retlist,
00801 const Pathname &dirname,
00802 bool dots = true) const;
00803
00807 bool doesFileExist(MediaAccessId accessId,
00808 const Pathname & filename ) const;
00809 public:
00814 static time_t
00815 getMountTableMTime();
00816
00821 static std::vector<MountEntry>
00822 getMountEntries();
00823
00833 bool
00834 isUseableAttachPoint(const Pathname &path,
00835 bool mtab=true) const;
00836
00837 private:
00838 friend class MediaHandler;
00839
00849 AttachedMedia
00850 getAttachedMedia(MediaAccessId &accessId) const;
00851
00861 AttachedMedia
00862 findAttachedMedia(const MediaSourceRef &media) const;
00863
00872 void
00873 forceReleaseShared(const MediaSourceRef &media);
00874
00875 private:
00879 static zypp::RW_pointer<MediaManager_Impl> m_impl;
00880 };
00881
00882
00884 }
00886
00888 }
00890
00891 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00892
00893
00894
00895