libzypp  17.38.7
repodownloaderwf.h
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
9 #ifndef ZYPP_NG_REPODOWNLOADER_WORKFLOW_INCLUDED
10 #define ZYPP_NG_REPODOWNLOADER_WORKFLOW_INCLUDED
11 
12 
13 #include <zypp/RepoInfo.h>
14 #include <zypp/ng/repo/Downloader>
15 #include <zypp-core/ng/ui/ProgressObserver>
16 #include <zypp-core/ng/async/task.h>
17 #include <zypp-core/ng/pipelines/Expected>
18 #include <zypp-media/MediaException>
19 #include <zypp-media/ng/ProvideSpec>
20 #include <zypp-media/ng/LazyMediaHandle>
21 
22 #include <zypp/ManagedFile.h>
23 
24 
25 namespace zyppng {
26 
27  class Provide;
28  class ProvideMediaHandle;
29 
30  namespace RepoDownloaderWorkflow {
31  MaybeAwaitable<expected<repo::DownloadContextRef>> downloadMasterIndex ( repo::DownloadContextRef dl, ProvideMediaHandle mediaHandle, zypp::filesystem::Pathname masterIndex_r );
32  MaybeAwaitable<expected<repo::DownloadContextRef>> downloadMasterIndex ( repo::DownloadContextRef dl, LazyMediaHandle<Provide> mediaHandle, zypp::filesystem::Pathname masterIndex_r );
33 
34  MaybeAwaitable<expected<zypp::RepoStatus>> repoStatus( repo::DownloadContextRef dl, ProvideMediaHandle mediaHandle );
35  MaybeAwaitable<expected<zypp::RepoStatus> > repoStatus( repo::DownloadContextRef dl, LazyMediaHandle<Provide> mediaHandle );
36 
37  MaybeAwaitable<expected<repo::DownloadContextRef>> download ( repo::DownloadContextRef dl, ProvideMediaHandle mediaHandle, ProgressObserverRef progressObserver = nullptr );
38  MaybeAwaitable<expected<repo::DownloadContextRef> > download(repo::DownloadContextRef dl, LazyMediaHandle<Provide> mediaHandle, ProgressObserverRef progressObserver);
39 
40  template <typename MediaHandle>
41  auto downloadMediaInfo ( MediaHandle &&mediaHandle, const zypp::filesystem::Pathname &destdir ) {
42  using namespace zyppng::operators;
43  using ProvideType = typename std::decay_t<MediaHandle>::ParentType;
44 
45  auto provider = mediaHandle.parent();
46  if ( !provider )
47  return makeReadyTask<expected<zypp::ManagedFile>>( expected<zypp::ManagedFile>::error(ZYPP_EXCPT_PTR(zypp::media::MediaException("Invalid handle"))) );
48 
49  return provider->provide( std::forward<MediaHandle>(mediaHandle), "/media.1/media", ProvideFileSpec().setOptional(true).setDownloadSize( zypp::ByteCount(20, zypp::ByteCount::MB ) ).setMirrorsAllowed(false) )
50  | and_then( ProvideType::copyResultToDest( provider, destdir / "/media.1/media" ) );
51 
52  }
53  }
54 }
55 
56 
57 #endif
MaybeAwaitable< expected< repo::DownloadContextRef > > downloadMasterIndex(repo::DownloadContextRef dl, ProvideMediaHandle mediaHandle, zypp::filesystem::Pathname masterIndex_r)
Store and operate with byte count.
Definition: ByteCount.h:31
static const Unit MB
1000^2 Byte
Definition: ByteCount.h:61
#define ZYPP_EXCPT_PTR(EXCPT)
Drops a logline and returns Exception as a std::exception_ptr.
Definition: Exception.h:463
const Ref< ProvideType > & parent() const
Just inherits Exception to separate media exceptions.
MaybeAwaitable< expected< repo::DownloadContextRef > > download(repo::DownloadContextRef dl, ProvideMediaHandle mediaHandle, ProgressObserverRef progressObserver=nullptr)
ResultType and_then(const expected< T, E > &exp, Function &&f)
Definition: expected.h:520
typename decay< T >::type decay_t
Definition: TypeTraits.h:42
MaybeAwaitable< expected< zypp::RepoStatus > > repoStatus(repo::DownloadContextRef dl, ProvideMediaHandle mediaHandle)
auto downloadMediaInfo(MediaHandle &&mediaHandle, const zypp::filesystem::Pathname &destdir)