libzypp  17.32.4
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/zyppng/ui/ProgressObserver>
16 #include <zypp-core/zyppng/pipelines/AsyncResult>
17 #include <zypp-core/zyppng/pipelines/Expected>
18 #include <zypp-media/MediaException>
19 #include <zypp-media/ng/ProvideSpec>
20 
21 #include <zypp/ManagedFile.h>
22 
23 
24 namespace zyppng {
25  class ProvideMediaHandle;
26  class SyncMediaHandle;
27 
28  namespace RepoDownloaderWorkflow {
29  AsyncOpRef<expected<repo::AsyncDownloadContextRef>> downloadMasterIndex ( repo::AsyncDownloadContextRef dl, ProvideMediaHandle mediaHandle, zypp::filesystem::Pathname masterIndex_r );
30  expected<repo::SyncDownloadContextRef> downloadMasterIndex ( repo::SyncDownloadContextRef dl, SyncMediaHandle mediaHandle, zypp::filesystem::Pathname masterIndex_r );
31 
32  AsyncOpRef<expected<zypp::RepoStatus>> repoStatus( repo::AsyncDownloadContextRef dl, ProvideMediaHandle mediaHandle );
33  expected<zypp::RepoStatus> repoStatus( repo::SyncDownloadContextRef dl, SyncMediaHandle mediaHandle );
34 
35  AsyncOpRef<expected<repo::AsyncDownloadContextRef>> download ( repo::AsyncDownloadContextRef dl, ProvideMediaHandle mediaHandle, ProgressObserverRef progressObserver = nullptr );
36  expected<repo::SyncDownloadContextRef> download ( repo::SyncDownloadContextRef dl, SyncMediaHandle mediaHandle, ProgressObserverRef progressObserver = nullptr );
37 
38 
39  template <typename MediaHandle>
40  auto downloadMediaInfo ( MediaHandle &&mediaHandle, const zypp::filesystem::Pathname &destdir ) {
41  using namespace zyppng::operators;
42  using ProvideType = typename std::decay_t<MediaHandle>::ParentType;
43 
44  // check if we have a async media handle
45  constexpr bool isAsync = std::is_same_v<std::decay_t<MediaHandle>, ProvideMediaHandle>;
46  auto provider = mediaHandle.parent();
47  if ( !provider )
48  return makeReadyResult<expected<zypp::ManagedFile>, isAsync>( expected<zypp::ManagedFile>::error(ZYPP_EXCPT_PTR(zypp::media::MediaException("Invalid handle"))) );
49 
50  return provider->provide( std::forward<MediaHandle>(mediaHandle), "/media.1/media", ProvideFileSpec().setOptional(true).setDownloadSize( zypp::ByteCount(20, zypp::ByteCount::MB ) ))
51  | and_then( ProvideType::copyResultToDest( provider, destdir / "/media.1/media" ) );
52 
53  }
54  }
55 }
56 
57 
58 #endif
AsyncOpRef< expected< repo::AsyncDownloadContextRef > > download(repo::AsyncDownloadContextRef dl, ProvideMediaHandle mediaHandle, ProgressObserverRef progressObserver=nullptr)
Store and operate with byte count.
Definition: ByteCount.h:30
static const Unit MB
1000^2 Byte
Definition: ByteCount.h:60
#define ZYPP_EXCPT_PTR(EXCPT)
Drops a logline and returns Exception as a std::exception_ptr.
Definition: Exception.h:433
Just inherits Exception to separate media exceptions.
AsyncOpRef< expected< repo::AsyncDownloadContextRef > > downloadMasterIndex(repo::AsyncDownloadContextRef dl, ProvideMediaHandle mediaHandle, zypp::filesystem::Pathname masterIndex_r)
MediaSyncFacadeRef parent() const
Definition: mediafacade.cc:109
AsyncOpRef< expected< zypp::RepoStatus > > repoStatus(repo::AsyncDownloadContextRef dl, ProvideMediaHandle mediaHandle)
auto downloadMediaInfo(MediaHandle &&mediaHandle, const zypp::filesystem::Pathname &destdir)