libzypp  12.16.5
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 
26 #include "zypp/media/MediaSource.h"
28 #include "zypp/APIConfig.h"
29 
30 namespace zypp {
31  namespace media {
32 
33 
35 //
36 // CLASS NAME : MediaHandler
45 class MediaHandler {
46  friend std::ostream & operator<<( std::ostream & str, const MediaHandler & obj );
47 
48  public:
49  typedef shared_ptr<MediaHandler> Ptr;
50  typedef shared_ptr<const MediaHandler> constPtr;
51 
52  static bool setAttachPrefix(const Pathname &attach_prefix);
53 
54  static std::string getRealPath(const std::string &path);
55  static Pathname getRealPath(const Pathname &path);
56 
57  private:
61  static Pathname _attachPrefix;
62 
66  mutable
68 
74 
86 
92  Pathname _relativeRoot;
93 
99 
101  mutable time_t _attach_mtime;
102 
104  mutable Pathname _deltafile;
105 
106  protected:
110  const Url _url;
111 
116 
124  friend class MediaAccess;
125 
132  bool dependsOnParent(MediaAccessId parentId,
133  bool exactIdMatch);
134  bool dependsOnParent();
135 
141  void resetParentId();
142 
146  Pathname attachPoint() const;
147 
153  void setAttachPoint(const Pathname &path, bool temp);
154 
159  void setAttachPoint(const AttachPointRef &ref);
160 
165 
171  void attachPointHint(const Pathname &path, bool temp);
172 
179  Pathname createAttachPoint() const;
186  Pathname createAttachPoint(const Pathname &attach_root) const;
187 
192  void removeAttachPoint();
193 
200  virtual bool checkAttachPoint(const Pathname &apoint) const;
201 
210  static bool checkAttachPoint(const Pathname &apoint,
211  bool empty_dir,
212  bool writeable);
213 
222  bool isUseableAttachPoint(const Pathname &path,
223  bool mtab=true) const;
224 
229  std::string mediaSourceName() const
230  {
231  return _mediaSource ? _mediaSource->name : "";
232  }
233 
238  void setMediaSource(const MediaSourceRef &ref);
239 
245  findAttachedMedia(const MediaSourceRef &media) const;
246 
259 
264  bool isSharedMedia() const;
265 
274  bool checkAttached(bool matchMountFs) const;
275 
284  void forceRelaseAllMedia(bool matchMountFs);
285  void forceRelaseAllMedia(const MediaSourceRef &ref,
286  bool matchMountFs);
287 
288  protected:
289 
291  //
292  // Real action interface to be overloaded by concrete handler.
293  //
295 
308  virtual void attachTo(bool next = false) = 0;
309 
325  virtual void disconnectFrom() { return; }
326 
339  virtual void releaseFrom( const std::string & ejectDev = "" ) = 0;
340 
347  virtual void forceEject( const std::string & device ) {}
348 
360  virtual void getFile( const Pathname & filename ) const = 0;
361 
373  virtual void getFileCopy( const Pathname & srcFilename, const Pathname & targetFilename ) const;
374 
375 
391  virtual void getDir( const Pathname & dirname, bool recurse_r ) const = 0;
392 
408  virtual void getDirInfo( std::list<std::string> & retlist,
409  const Pathname & dirname, bool dots = true ) const = 0;
410 
422  virtual void getDirInfo( filesystem::DirContent & retlist,
423  const Pathname & dirname, bool dots = true ) const = 0;
424 
433  virtual bool getDoesFileExist( const Pathname & filename ) const = 0;
434 
435  protected:
436 
445  void getDirectoryYast( std::list<std::string> & retlist,
446  const Pathname & dirname, bool dots = true ) const;
447 
457  const Pathname & dirname, bool dots = true ) const;
458 
459  public:
460 
472  MediaHandler ( const Url& url_r,
473  const Pathname & attach_point_r,
474  const Pathname & urlpath_below_attachpoint_r,
475  const bool does_download_r );
476 
481  virtual ~MediaHandler();
482 
483  public:
484 
485 
487  //
488  // MediaAccess interface. Does common checks and logging.
489  // Invokes real action if necessary.
490  //
492 
496  bool downloads() const { return _does_download; }
497 
501  std::string protocol() const { return _url.getScheme(); }
502 
506  Url url() const { return _url; }
507 
518  void attach(bool next);
519 
523  virtual bool isAttached() const { return _mediaSource; }
524 
533  Pathname localRoot() const;
534 
540  Pathname localPath( const Pathname & pathname ) const;
541 
555  void disconnect();
556 
563  void release( const std::string & ejectDev = "" );
564 
573  void provideFile( Pathname filename ) const;
574 
586  void provideFileCopy( Pathname srcFilename, Pathname targetFilename) const;
587 
597  void provideDir( Pathname dirname ) const;
598 
608  void provideDirTree( Pathname dirname ) const;
609 
617  void releaseFile( const Pathname & filename ) const { return releasePath( filename ); }
618 
626  void releaseDir( const Pathname & dirname ) const { return releasePath( dirname ); }
627 
640  void releasePath( Pathname pathname ) const;
641 
642  /*
643  * set a deltafile to be used in the next download
644  */
645  void setDeltafile( const Pathname &filename = Pathname()) const;
646 
647  /*
648  * return the deltafile set with setDeltafile()
649  */
650  Pathname deltafile () const;
651 
652  public:
653 
667  void dirInfo( std::list<std::string> & retlist,
668  const Pathname & dirname, bool dots = true ) const;
669 
682  void dirInfo( filesystem::DirContent & retlist,
683  const Pathname & dirname, bool dots = true ) const;
684 
693  bool doesFileExist( const Pathname & filename ) const;
694 
698  virtual bool hasMoreDevices();
699 
708  virtual void
709  getDetectedDevices(std::vector<std::string> & devices,
710  unsigned int & index) const;
711 };
712 
714 
715  } // namespace media
716 } // namespace zypp
717 
718 
719 #endif // ZYPP_MEDIA_MEDIAHANDLERL_H
720 
721