libzypp  17.37.18
lazymediahandle.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
9 #ifndef ZYPP_MEDIA_NG_LAZYMEDIAHANDLE_H
10 #define ZYPP_MEDIA_NG_LAZYMEDIAHANDLE_H
11 
13 #include <zypp-media/ng/ProvideSpec>
14 #include <optional>
15 
16 
17 namespace zyppng
18 {
19  template < class ProvideType >
21  public:
22  using MediaHandle = typename ProvideType::MediaHandle;
24 
25  friend ProvideType;
26 
28  : _sharedData(
29  std::make_shared<Data>(
30  std::move(provider)
31  ,std::move(origin)
32  ,std::move(spec)
33  ))
34  { }
35 
36  LazyMediaHandle(const LazyMediaHandle &) = default;
37  LazyMediaHandle(LazyMediaHandle &&) = default;
38  LazyMediaHandle &operator=(const LazyMediaHandle &) = default;
40 
41  const Ref<ProvideType> &parent () const {
42  return _sharedData->_provider.lock();
43  }
44 
49  const zypp::Url &baseUrl() const {
50  if ( !_sharedData->_mediaHandle ) {
51  return _sharedData->_origin.authority().url();
52  } else {
53  return _sharedData->_mediaHandle->baseUrl();
54  }
55  }
56 
57  const zypp::MirroredOrigin &origin() const {
58  return _sharedData->_origin;
59  }
60 
61  std::optional<MediaHandle> handle () const {
62  return _sharedData->_mediaHandle;
63  }
64 
65  const ProvideMediaSpec &spec() const {
66  return _sharedData->_spec;
67  }
68 
69  const std::optional<zypp::Pathname> &localPath() const
70  {
71  static std::optional<zypp::Pathname> noHandle;
72  if ( !attached() )
73  return noHandle;
74  return _sharedData->_mediaHandle.localPath();
75  }
76 
77  bool attached() const {
78  return _sharedData->_mediaHandle.has_value();
79  }
80 
81  private:
82 
83  struct Data {
86  : _provider(std::move(provider)), _origin(std::move(origin)),
87  _spec(std::move(spec)) {}
88 
89  Data(const Data &) = delete;
90  Data(Data &&) = delete;
91  Data &operator=(const Data &) = delete;
92  Data &operator=(Data &&) = delete;
93 
97  std::optional<MediaHandle> _mediaHandle;
98  };
100  };
101 }
102 
103 #endif // ZYPP_MEDIA_NG_LAZYMEDIAHANDLE_H
std::shared_ptr< T > Ref
Definition: zyppglobal.h:110
const ProvideMediaSpec & spec() const
std::optional< MediaHandle > _mediaHandle
Definition: ansi.h:854
LazyMediaHandle(Ref< ProvideType > provider, zypp::MirroredOrigin origin, ProvideMediaSpec spec)
const Ref< ProvideType > & parent() const
typename ProvideType::MediaHandle MediaHandle
Data(Ref< ProvideType > &&provider, zypp::MirroredOrigin &&origin, ProvideMediaSpec &&spec)
Manages a data source characterized by an authoritative URL and a list of mirror URLs.
const zypp::MirroredOrigin & origin() const
std::optional< MediaHandle > handle() const
std::weak_ptr< T > WeakRef
Definition: zyppglobal.h:113
zypp::MirroredOrigin _origin
Data & operator=(const Data &)=delete
LazyMediaHandle & operator=(const LazyMediaHandle &)=default
const std::optional< zypp::Pathname > & localPath() const
WeakRef< ProvideType > _provider
const zypp::Url & baseUrl() const
Url manipulation class.
Definition: Url.h:92