Imported Upstream version 16.3.2
[platform/upstream/libzypp.git] / zypp / media / MediaCD.h
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/media/MediaCD.h
10  *
11 */
12 #ifndef ZYPP_MEDIA_MEDIACD_H
13 #define ZYPP_MEDIA_MEDIACD_H
14
15 #include "zypp/media/MediaHandler.h"
16 #include "zypp/media/MediaManager.h"
17
18 namespace zypp {
19   namespace media {
20
21     ///////////////////////////////////////////////////////////////////
22     //
23     //  CLASS NAME : MediaCD
24     /**
25      * @short Implementation class for CD/DVD MediaHandler
26      * @see MediaHandler
27      **/
28     class MediaCD : public MediaHandler {
29
30       private:
31         typedef std::list<MediaSource> DeviceList;
32         /** list of devices to try to mount */
33         mutable DeviceList _devices;
34
35         /** number of last successful mounted device in list */
36         int        _lastdev;
37         int        _lastdev_tried;
38
39         static bool openTray( const std::string & device_r );
40         static bool closeTray( const std::string & device_r );
41
42         DeviceList  detectDevices(bool supportingDVD) const;
43
44       protected:
45
46         virtual void attachTo (bool next = false);
47         virtual void releaseFrom( const std::string & ejectDev );
48         virtual void getFile( const Pathname & filename ) const;
49         virtual void getDir( const Pathname & dirname, bool recurse_r ) const;
50         virtual void getDirInfo( std::list<std::string> & retlist,
51                                  const Pathname & dirname, bool dots = true ) const;
52         virtual void getDirInfo( filesystem::DirContent & retlist,
53                                  const Pathname & dirname, bool dots = true ) const;
54         virtual bool getDoesFileExist( const Pathname & filename ) const;
55
56         virtual void forceEject(const std::string & ejectDev);
57
58         virtual bool hasMoreDevices();
59
60         virtual void
61         getDetectedDevices(std::vector<std::string> & devices,
62                            unsigned int & index) const;
63
64       public:
65
66         MediaCD( const Url &      url_r,
67                  const Pathname & attach_point_hint_r );
68
69         virtual ~MediaCD() { try { release(); } catch(...) {} }
70
71         virtual bool isAttached() const;
72     };
73
74 ///////////////////////////////////////////////////////////////////
75   } // namespace media
76 } // namespace zypp
77 #endif // ZYPP_MEDIA_MEDIACD_H