libzypp 17.35.1
MediaHandler.h
Go to the documentation of this file.
1
2/*---------------------------------------------------------------------\
3| ____ _ __ __ ___ |
4| |__ / \ / / . \ . \ |
5| / / \ V /| _/ _/ |
6| / /__ | | | | | | |
7| /_____||_| |_| |_| |
8| |
9\---------------------------------------------------------------------*/
13#ifndef ZYPP_MEDIA_MEDIAHANDLERL_H
14#define ZYPP_MEDIA_MEDIAHANDLERL_H
15
16#include <iosfwd>
17#include <string>
18#include <list>
19
20#include <zypp/Pathname.h>
21#include <zypp/PathInfo.h>
22#include <zypp/base/PtrTypes.h>
23
24#include <zypp/Url.h>
25
27#include <zypp-media/MediaException>
28#include <zypp-core/Globals.h>
29#include <zypp-core/OnMediaLocation>
30
31#undef ZYPP_BASE_LOGGER_LOGGROUP
32#define ZYPP_BASE_LOGGER_LOGGROUP "zypp::media"
33
34namespace zypp {
35 namespace media {
36
37 class MediaManager;
38
39
41//
42// CLASS NAME : MediaHandler
52 friend std::ostream & operator<<( std::ostream & str, const MediaHandler & obj );
53
54 public:
55 using Ptr = shared_ptr<MediaHandler>;
56 using constPtr = shared_ptr<const MediaHandler>;
57
58 static bool setAttachPrefix(const Pathname &attach_prefix);
59
60 static std::string getRealPath(const std::string &path);
61 static Pathname getRealPath(const Pathname &path);
62
63 private:
68
72 mutable
74
80
92
99
105
107 mutable time_t _attach_mtime;
108
109 protected:
113 const Url _url;
114
119
120 public:
121
128 bool dependsOnParent(MediaAccessId parentId,
129 bool exactIdMatch);
130 bool dependsOnParent();
131
137 void resetParentId();
138
142 Pathname attachPoint() const;
143
149 void setAttachPoint(const Pathname &path, bool temp);
150
155 void setAttachPoint(const AttachPointRef &ref);
156
160 AttachPoint attachPointHint() const;
161
167 void attachPointHint(const Pathname &path, bool temp);
168
176 Pathname createAttachPoint() const;
183 Pathname createAttachPoint(const Pathname &attach_root) const;
184
189 void removeAttachPoint();
190
197 virtual bool checkAttachPoint(const Pathname &apoint) const;
198
207 static bool checkAttachPoint(const Pathname &apoint,
208 bool empty_dir,
209 bool writeable);
210
219 bool isUseableAttachPoint(const Pathname &path,
220 bool mtab=true) const;
221
226 std::string mediaSourceName() const
227 {
228 return _mediaSource ? _mediaSource->name : "";
229 }
230
235 void setMediaSource(const MediaSourceRef &ref);
236
242 findAttachedMedia(const MediaSourceRef &media) const;
243
255 AttachedMedia attachedMedia() const;
256
261 bool isSharedMedia() const;
262
271 bool checkAttached(bool matchMountFs) const;
272
281 void forceRelaseAllMedia(bool matchMountFs);
282 void forceRelaseAllMedia(const MediaSourceRef &ref,
283 bool matchMountFs);
284
285 protected:
286
288 //
289 // Real action interface to be overloaded by concrete handler.
290 //
292
305 virtual void attachTo(bool next = false) = 0;
306
322 virtual void disconnectFrom() { return; }
323
336 virtual void releaseFrom( const std::string & ejectDev = "" ) = 0;
337
344 virtual void forceEject( const std::string & device ) {}
345
357 virtual void getFile( const OnMediaLocation &file ) const;
358
370 virtual void getFileCopy( const OnMediaLocation & file, const Pathname & targetFilename ) const;
371
372
388 virtual void getDir( const Pathname & dirname, bool recurse_r ) const = 0;
389
405 virtual void getDirInfo( std::list<std::string> & retlist,
406 const Pathname & dirname, bool dots = true ) const = 0;
407
419 virtual void getDirInfo( filesystem::DirContent & retlist,
420 const Pathname & dirname, bool dots = true ) const = 0;
421
430 virtual bool getDoesFileExist( const Pathname & filename ) const = 0;
431
432 protected:
433
442 void getDirectoryYast( std::list<std::string> & retlist,
443 const Pathname & dirname, bool dots = true ) const;
444
453 void getDirectoryYast( filesystem::DirContent & retlist,
454 const Pathname & dirname, bool dots = true ) const;
455
456 public:
457
469 MediaHandler ( Url url_r,
470 const Pathname & attach_point_r,
471 Pathname urlpath_below_attachpoint_r,
472 const bool does_download_r );
473
478 virtual ~MediaHandler();
479
480 public:
481
482
484 //
485 // MediaAccess interface. Does common checks and logging.
486 // Invokes real action if necessary.
487 //
489
493 bool downloads() const { return _does_download; }
494
498 std::string protocol() const { return _url.getScheme(); }
499
503 Url url() const { return _url; }
504
515 void attach(bool next);
516
520 virtual bool isAttached() const { return _mediaSource != nullptr; }
521
530 Pathname localRoot() const;
531
537 Pathname localPath( const Pathname & pathname ) const;
538
552 void disconnect();
553
560 void release( const std::string & ejectDev = "" );
561
570 void provideFile( const OnMediaLocation &file ) const;
571
583 void provideFileCopy( const OnMediaLocation &srcFile, const Pathname& targetFilename ) const;
584
594 void provideDir( const Pathname& dirname ) const;
595
605 void provideDirTree( const Pathname& dirname ) const;
606
614 void releaseFile( const Pathname & filename ) const { return releasePath( filename ); }
615
623 void releaseDir( const Pathname & dirname ) const { return releasePath( dirname ); }
624
637 void releasePath( const Pathname& pathname ) const;
638
639 public:
640
654 void dirInfo( std::list<std::string> & retlist,
655 const Pathname & dirname, bool dots = true ) const;
656
669 void dirInfo( filesystem::DirContent & retlist,
670 const Pathname & dirname, bool dots = true ) const;
671
680 bool doesFileExist( const Pathname & filename ) const;
681
685 virtual bool hasMoreDevices();
686
695 virtual void
696 getDetectedDevices(std::vector<std::string> & devices,
697 unsigned int & index) const;
698
709 virtual void
710 precacheFiles ( const std::vector< OnMediaLocation > &files );
711};
712
714
715 } // namespace media
716} // namespace zypp
717
718
719#endif // ZYPP_MEDIA_MEDIAHANDLERL_H
std::ostream & operator<<(std::ostream &str, const zypp::sat::detail::CDataiterator *obj)
Describes a resource file located on a medium.
Url manipulation class.
Definition Url.h:92
std::string getScheme() const
Returns the scheme name of the URL.
Definition Url.cc:537
Attach point of a media source.
Abstract base class for 'physical' MediaHandler like MediaCD, etc.
virtual void attachTo(bool next=false)=0
Call concrete handler to attach the media.
Url url() const
Url used.
MediaSourceRef _mediaSource
The attached media source description reference.
shared_ptr< const MediaHandler > constPtr
time_t _attach_mtime
timestamp of the the last attach verification
virtual bool isAttached() const
True if media is attached.
AttachPoint _attachPointHint
The user provided attach preferred point.
virtual void disconnectFrom()
Call concrete handler to disconnect media.
bool downloads() const
Hint if files are downloaded or not.
AttachPointRef _attachPoint
This is where the media will be actually attached ("mounted").
void releaseDir(const Pathname &dirname) const
Remove directory tree below localRoot IFF handler downloads files to the local filesystem.
shared_ptr< MediaHandler > Ptr
std::string mediaSourceName() const
Get the media source name or an empty string.
static Pathname _attachPrefix
User defined default attach point prefix.
std::string protocol() const
Protocol hint for MediaAccess.
const Url _url
Url to handle.
void releaseFile(const Pathname &filename) const
Remove filename below localRoot IFF handler downloads files to the local filesystem.
Pathname _relativeRoot
The relative root directory of the data on the media.
virtual void releaseFrom(const std::string &ejectDev="")=0
Call concrete handler to release the media.
virtual void forceEject(const std::string &device)
Call concrete handler to physically eject the media (i.e.
bool _does_download
True if concrete handler downloads files to the local filesystem.
MediaAccessId _parentId
Access Id of media handler we depend on.
String related utilities and Regular expression matching.
std::list< DirEntry > DirContent
Returned by readdir.
Definition PathInfo.h:519
unsigned int MediaAccessId
Media manager access Id type.
Definition MediaSource.h:30
Easy-to use interface to the ZYPP dependency resolver.
zypp::Url _url
A simple structure containing references to a media source and its attach point.
Provides API related macros.
#define ZYPP_TESTS
Definition Globals.h:70