libzypp 17.37.17
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
17namespace zyppng
18{
19 template < class ProvideType >
21 public:
22 using MediaHandle = typename ProvideType::MediaHandle;
24
26
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;
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
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
Manages a data source characterized by an authoritative URL and a list of mirror URLs.
Url manipulation class.
Definition Url.h:93
const zypp::MirroredOrigin & origin() const
const std::optional< zypp::Pathname > & localPath() const
LazyMediaHandle & operator=(LazyMediaHandle &&)=default
const ProvideMediaSpec & spec() const
typename Provide::MediaHandle MediaHandle
LazyMediaHandle & operator=(const LazyMediaHandle &)=default
const zypp::Url & baseUrl() const
LazyMediaHandle(const LazyMediaHandle &)=default
const Ref< ProvideType > & parent() const
LazyMediaHandle(LazyMediaHandle &&)=default
std::optional< MediaHandle > handle() const
LazyMediaHandle(Ref< ProvideType > provider, zypp::MirroredOrigin origin, ProvideMediaSpec spec)
Definition Arch.h:364
std::shared_ptr< T > Ref
Definition zyppglobal.h:110
std::weak_ptr< T > WeakRef
Definition zyppglobal.h:113
std::optional< MediaHandle > _mediaHandle
Data & operator=(Data &&)=delete
zypp::MirroredOrigin _origin
Data(Ref< ProvideType > &&provider, zypp::MirroredOrigin &&origin, ProvideMediaSpec &&spec)
Data & operator=(const Data &)=delete
Data(const Data &)=delete
WeakRef< ProvideType > _provider