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
00469 class MediaManager: private zypp::base::NonCopyable
00470 {
00471 public:
00483 MediaManager();
00484
00489 ~MediaManager();
00490
00511 MediaAccessId
00512 open(const Url &url, const Pathname & preferred_attach_point = "");
00513
00518 void
00519 close(MediaAccessId accessId);
00520
00527 bool
00528 isOpen(MediaAccessId accessId) const;
00529
00539 std::string
00540 protocol(MediaAccessId accessId) const;
00541
00547 bool
00548 downloads(MediaAccessId accessId) const;
00549
00551 static
00552 ZYPP_DEPRECATED bool downloads(const Url &url)
00553 { return url.schemeIsDownloading(); }
00554
00562 Url
00563 url(MediaAccessId accessId) const;
00564
00565 public:
00574 void
00575 addVerifier(MediaAccessId accessId,
00576 const MediaVerifierRef &verifier);
00577
00585 void
00586 delVerifier(MediaAccessId accessId);
00587
00588 public:
00601 bool
00602 setAttachPrefix(const Pathname &attach_prefix);
00603
00613 void
00614 attach(MediaAccessId accessId);
00615
00617 ZYPP_DEPRECATED void attachDesiredMedia(MediaAccessId accessId)
00618 { attach( accessId ); }
00619
00631 void
00632 release(MediaAccessId accessId, const std::string & ejectDev = "");
00633
00637 void
00638 releaseAll();
00639
00654 void
00655 disconnect(MediaAccessId accessId);
00656
00664 bool
00665 isAttached(MediaAccessId accessId) const;
00666
00675 bool
00676 isSharedMedia(MediaAccessId accessId) const;
00677
00687 bool
00688 isDesiredMedia(MediaAccessId accessId) const;
00689
00700 bool
00701 isDesiredMedia(MediaAccessId accessId,
00702 const MediaVerifierRef &verifier) const;
00703
00715 bool
00716 isChangeable(MediaAccessId accessId);
00717
00730 Pathname
00731 localRoot(MediaAccessId accessId) const;
00732
00745 Pathname
00746 localPath(MediaAccessId accessId, const Pathname & pathname) const;
00747
00748 public:
00767 void
00768 provideFile(MediaAccessId accessId,
00769 const Pathname &filename ) const;
00770
00774 void
00775 provideDir(MediaAccessId accessId,
00776 const Pathname &dirname) const;
00777
00781 void
00782 provideDirTree(MediaAccessId accessId,
00783 const Pathname &dirname) const;
00784
00788 void
00789 releaseFile(MediaAccessId accessId,
00790 const Pathname &filename) const;
00791
00795 void
00796 releaseDir(MediaAccessId accessId,
00797 const Pathname &dirname) const;
00798
00802 void
00803 releasePath(MediaAccessId accessId,
00804 const Pathname &pathname) const;
00805
00809 void
00810 dirInfo(MediaAccessId accessId,
00811 std::list<std::string> &retlist,
00812 const Pathname &dirname,
00813 bool dots = true) const;
00814
00818 void
00819 dirInfo(MediaAccessId accessId,
00820 filesystem::DirContent &retlist,
00821 const Pathname &dirname,
00822 bool dots = true) const;
00823
00827 bool doesFileExist(MediaAccessId accessId,
00828 const Pathname & filename ) const;
00829
00839 void
00840 getDetectedDevices(MediaAccessId accessId,
00841 std::vector<std::string> & devices,
00842 unsigned int & index) const;
00843
00844 void
00845 setDeltafile(MediaAccessId accessId,
00846 const Pathname &filename ) const;
00847
00848 public:
00853 static time_t
00854 getMountTableMTime();
00855
00860 static std::vector<MountEntry>
00861 getMountEntries();
00862
00872 bool
00873 isUseableAttachPoint(const Pathname &path,
00874 bool mtab=true) const;
00875
00876 private:
00877 friend class MediaHandler;
00878
00888 AttachedMedia
00889 getAttachedMedia(MediaAccessId &accessId) const;
00890
00900 AttachedMedia
00901 findAttachedMedia(const MediaSourceRef &media) const;
00902
00911 void
00912 forceReleaseShared(const MediaSourceRef &media);
00913
00914 private:
00918 static zypp::RW_pointer<MediaManager_Impl> m_impl;
00919 };
00920
00921
00923 }
00925
00927 }
00929
00930 #endif // ZYPP_MEDIA_MEDIAMANAGER_H
00931
00932
00933
00934