libzypp 17.35.12
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
12#include <zypp-media/ng/ProvideSpec>
13#include <optional>
14
15
16namespace zyppng
17{
18 template < class ProvideType >
20 public:
21 using MediaHandle = typename ProvideType::MediaHandle;
23
25
26 LazyMediaHandle( Ref<ProvideType> provider, std::vector<zypp::Url> urls, ProvideMediaSpec spec )
28 std::make_shared<Data>(
29 std::move(provider)
30 ,std::move(urls)
31 ,std::move(spec)
32 ))
33 { }
34
35 LazyMediaHandle(const LazyMediaHandle &) = default;
39
40 const Ref<ProvideType> &parent () const {
41 return _sharedData->_provider.lock();
42 }
43
48 const zypp::Url &baseUrl() const {
49 if ( !_sharedData->_mediaHandle ) {
50 static zypp::Url invalidHandle;
51 if ( _sharedData->_urls.empty() )
52 return invalidHandle;
53 return _sharedData->_urls.front();
54 } else {
55 return _sharedData->_mediaHandle->baseUrl();
56 }
57 }
58
59 const std::vector<zypp::Url> &urls() const {
60 return _sharedData->_urls;
61 }
62
63 std::optional<MediaHandle> handle () const {
64 return _sharedData->_mediaHandle;
65 }
66
67 const ProvideMediaSpec &spec() const {
68 return _sharedData->_spec;
69 }
70
71 const std::optional<zypp::Pathname> &localPath() const
72 {
73 static std::optional<zypp::Pathname> noHandle;
74 if ( !attached() )
75 return noHandle;
76 return _sharedData->_mediaHandle.localPath();
77 }
78
79 bool attached() const {
80 return _sharedData->_mediaHandle.has_value();
81 }
82
83 private:
84
85 struct Data {
86 Data(Ref<ProvideType> &&provider, std::vector<zypp::Url> &&urls,
88 : _provider(std::move(provider)), _urls(std::move(urls)),
89 _spec(std::move(spec)) {}
90
91 Data(const Data &) = delete;
92 Data(Data &&) = delete;
93 Data &operator=(const Data &) = delete;
94 Data &operator=(Data &&) = delete;
95
97 std::vector<zypp::Url> _urls;
99 std::optional<MediaHandle> _mediaHandle;
100 };
102 };
103}
104
105#endif // ZYPP_MEDIA_NG_LAZYMEDIAHANDLE_H
Url manipulation class.
Definition Url.h:92
const std::vector< zypp::Url > & urls() const
const std::optional< zypp::Pathname > & localPath() const
LazyMediaHandle & operator=(LazyMediaHandle &&)=default
const ProvideMediaSpec & spec() const
typename ProvideType::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, std::vector< zypp::Url > urls, 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
Data & operator=(const Data &)=delete
Data(const Data &)=delete
WeakRef< ProvideType > _provider
std::vector< zypp::Url > _urls
Data(Ref< ProvideType > &&provider, std::vector< zypp::Url > &&urls, ProvideMediaSpec &&spec)